C#学习(九)——数据库与WPF

这篇具有很好参考价值的文章主要介绍了C#学习(九)——数据库与WPF。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、创建WPF项目链接数据库

首先创建WPF项目,在nuget安装包中下载System.Data.SqlClient
C#学习(九)——数据库与WPF,c#,学习,数据库,wpf,sqlserver
配置数据库的连接字符串来连接数据库
创建示例数据库,拥有两个table:

CREATE TABLE [dbo].[Customers] (
    [Id]       INT         IDENTITY (1, 1) NOT NULL,
    [Name]     NCHAR (50)  NOT NULL,
    [IdNumber] NCHAR (18)  NOT NULL,
    [Address]  NCHAR (100) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].Appointments
(
	[Id] INT NOT NULL PRIMARY KEY IDENTITY, 
    [Time] DATETIME NOT NULL, 
    [CustomerId] INT NOT NULL, 
    CONSTRAINT [FK_Appointments_Customers] FOREIGN KEY (CustomerId) REFERENCES Customers(Id)
)

实现UI界面对于数据库数据的显示
MainWindow.xaml.cs

public partial class MainWindow : Window
{
    private SqlConnection _sqlConnection;
    public MainWindow()
    {
        InitializeComponent();
        string connectionString = "数据库连接字符串";//填入自己的数据库连接字符串

        _sqlConnection = new SqlConnection(connectionString);

        ShowCustomers();
    }

    //访问数据库
    private void ShowCustomers()
    {
        //防止数据库死机等意外导致以下操作全部失败,系统崩溃
        try
        {
            SqlDataAdapter adapter = new SqlDataAdapter("select * from Customers", _sqlConnection);
            //数据库适配器可以帮我们解决数据库的打开关闭
            using (adapter)
            {
                DataTable customerTable = new DataTable();
                adapter.Fill(customerTable);

                customerList.DisplayMemberPath = "Name";
                //绑定数据
                customerList.SelectedValuePath = "Id";
                //绑定数据源
                customerList.ItemsSource = customerTable.DefaultView;
            }
        }catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }        
    }

	private void customerList_SelectionChanged(object sender, SelectionChangedEventArgs e)
	{
	    try
	    {
	        //查询Appointments.CustomerId = Customers.Id且为参数传入的Id,@为参数引导
	        string query = "select * from Appointments join Customers on Appointments.CustomerId = Customers.Id where Customers.Id = @CustomerId";
	
	        var customerId = customerList.SelectedValue;
	        //用于删除预约信息时,会先删除customerId,造成customerId为空情况
	        if (customerId == null)
	        {
	            appointmentList.ItemsSource = null;
	            return;
	        }        
	
	        SqlCommand sqlCommand = new SqlCommand(query, _sqlConnection);
	
	        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
	        //键值对数据在此聚合
	        sqlCommand.Parameters.AddWithValue("@CustomerId", customerId);
		
	        using (sqlDataAdapter)
	        {
	            DataTable appointmentTable = new DataTable();
	            sqlDataAdapter.Fill(appointmentTable);
	
	            appointmentList.DisplayMemberPath = "Time";
	            //绑定数据
	            appointmentList.SelectedValuePath = "Id";
	            //绑定数据源
	            appointmentList.ItemsSource = appointmentTable.DefaultView;
	        }
	    }
	    catch (Exception ex)
	    {
	        MessageBox.Show(ex.ToString());
	    }
	}
}

注意,要使用一个try,catch来包含操作,防止因为数据库卡顿死机等问题造成系统瘫痪

示例UI界面如下,注意UI界面的命名与后面函数名的对应

<Grid>
    <Label Content="客户列表" HorizontalAlignment="Left" Margin="67,35,0,0" VerticalAlignment="Top" Width="219"/>
    <ListBox d:ItemsSource="{d:SampleData ItemCount=5}" Margin="67,91,730,202" Name="customerList" SelectionChanged="customerList_SelectionChanged"/>
    <Label Content="预约记录" HorizontalAlignment="Left" Margin="590,30,0,0" VerticalAlignment="Top" Width="219"/>
    <ListBox d:ItemsSource="{d:SampleData ItemCount=5}" Margin="590,91,191,202" Name="appointmentList"/>
    <Button Content="删除客户" HorizontalAlignment="Left" Margin="67,388,0,0" VerticalAlignment="Top" RenderTransformOrigin="6.484,2.324" Width="203" Click="DeleteCustomer_Click"/>
    <Button Content="取消预约" HorizontalAlignment="Left" Margin="590,388,0,0" VerticalAlignment="Top" Width="219" Click="CancelAppointment_Click"/>
    <TextBox Name="NameTextBox" HorizontalAlignment="Left" Margin="23,495,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <TextBox Name="IdTextBox" HorizontalAlignment="Left" Margin="148,495,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <TextBox Name="AddressTextBox" HorizontalAlignment="Left" Margin="278,495,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
    <Label Content="姓名&#x9;" HorizontalAlignment="Left" Margin="23,466,0,0" VerticalAlignment="Top"/>
    <Label Content="身份证号" HorizontalAlignment="Left" Margin="148,466,0,0" VerticalAlignment="Top"/>
    <Label Content="住址" HorizontalAlignment="Left" Margin="278,466,0,0" VerticalAlignment="Top" RenderTransformOrigin="-1.766,1.797"/>
    <Label Content="添加客户信息" HorizontalAlignment="Left" Margin="23,436,0,0" VerticalAlignment="Top"/>
    <Button Content="添加客户" HorizontalAlignment="Left" Margin="23,533,0,0" VerticalAlignment="Top" Click="AddCustomer_Click"/>
    <DatePicker Name="AppointmentDatePicker" HorizontalAlignment="Left" Margin="590,479,0,0" VerticalAlignment="Top"/>
    <Label Content="添加预约日期" HorizontalAlignment="Left" Margin="590,436,0,0" VerticalAlignment="Top"/>
    <Button Content="预约" HorizontalAlignment="Left" Margin="590,523,0,0" VerticalAlignment="Top" Click="AddAppointment_Click"/>
    <Button Content="更新客户资料" HorizontalAlignment="Left" Margin="163,538,0,0" VerticalAlignment="Top" Click="UpdateCustomer_Click"/>
</Grid>

二、实现UI页面对于数据库的【增、删、改】

1.实现删除
对于Appointments表的删除,只需要直接delete即可以完成
示例代码如下

private void CancelAppointment_Click(object sender, RoutedEventArgs e)
{
    try
    {
        var sql = "delete from Appointments where Id = @AppointmentId";
        var appointmentId = appointmentList.SelectedValue;

        SqlCommand sqlCommand = new SqlCommand(sql, _sqlConnection);
        sqlCommand.Parameters.AddWithValue("@AppointmentId", appointmentId);

        _sqlConnection.Open();
        //执行删除
        sqlCommand.ExecuteScalar();
        MessageBox.Show("取消预约成功!");

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        _sqlConnection.Close();
        //刷新预约列表
        customerList_SelectionChanged(null, null);
    }
}

对于Customers表的删除,由于Appointments表的CustomerId为对应Customers表Id的外键,因此删除时,需要先删除Appointments数据,再删除Customers表的数据

private void DeleteCustomer_Click(object sender, RoutedEventArgs e)
{
    try
    {
        string sqlDelteAppointment = "delete from Appointments where CustomerId = @CustomerId";
        string sqlDeleteCustomer = "delete from Customers where Id = @CustomerId";

        var customerId = customerList.SelectedValue;

        SqlCommand sqlCommand1 = new SqlCommand( sqlDelteAppointment, _sqlConnection);
        SqlCommand sqlCommand2 = new SqlCommand( sqlDeleteCustomer, _sqlConnection);

        sqlCommand1.Parameters.AddWithValue("@CustomerId", customerId);
        sqlCommand2.Parameters.AddWithValue("@CustomerId", customerId);

        _sqlConnection.Open();
        sqlCommand1.ExecuteScalar();
        sqlCommand2.ExecuteScalar();

        MessageBox.Show("删除用户成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        _sqlConnection.Close();
        ShowCustomers();
        customerList_SelectionChanged(null, null);
    }
}

2.实现添加
添加时,注意appointments的Id是取自customers的selectedvalue中

private void AddCustomer_Click(object sender, RoutedEventArgs e)
{
    try
    {
        var sql = "insert into Customers values(@name, @id, @address)";

        SqlCommand sqlCommand = new SqlCommand(sql, _sqlConnection);

        sqlCommand.Parameters.AddWithValue("@name", NameTextBox.Text);
        sqlCommand.Parameters.AddWithValue("@id", IdTextBox.Text);
        sqlCommand.Parameters.AddWithValue("@address", AddressTextBox.Text);

        _sqlConnection.Open();
        sqlCommand.ExecuteScalar();
        MessageBox.Show("添加用户信息成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        _sqlConnection.Close();
        ShowCustomers();

    }
}

private void AddAppointment_Click(object sender, RoutedEventArgs e)
{
    try
    {
        var sql = "insert into Appointments values(@date, @customerId)";

        SqlCommand sqlCommand = new SqlCommand(sql, _sqlConnection);

        sqlCommand.Parameters.AddWithValue("@date", AppointmentDatePicker.Text);
        sqlCommand.Parameters.AddWithValue("@customerId", customerList.SelectedValue);

        _sqlConnection.Open();
        sqlCommand.ExecuteScalar();
        MessageBox.Show("用户信息更新成功!");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        _sqlConnection.Close();
        customerList_SelectionChanged(null, null);
    }
}

三、实现修改
实现修改,需要显示出项目数据,因此可以利用添加数据时的输入框来显示数据并完成修改,因此在 customerList_SelectionChanged函数中实现输入框显示数据

DataRowView selectItem = customerList.SelectedItem as DataRowView;
NameTextBox.Text = selectItem["Name"] as string;
IdTextBox.Text = selectItem["IdNumber"] as string;
AddressTextBox.Text = selectItem["Address"] as string;

那么就可以直接将输入框的数据接收传入修改

private void UpdateCustomer_Click(object sender, RoutedEventArgs e)
{
    try
    {
        var sql = "update Customers set Name=@name, IdNumber=@idNumber, Address=@address where Id=@customerId";


        SqlCommand sqlCommand = new SqlCommand(sql, _sqlConnection);

        sqlCommand.Parameters.AddWithValue("@name", NameTextBox.Text.Trim());//trim用来消除空格
        sqlCommand.Parameters.AddWithValue("@idNumber", IdTextBox.Text.Trim());
        sqlCommand.Parameters.AddWithValue("@address", AddressTextBox.Text.Trim());
        sqlCommand.Parameters.AddWithValue("@customerId", customerList.SelectedValue);

        _sqlConnection.Open();
        sqlCommand.ExecuteScalar();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    finally
    {
        _sqlConnection.Close();
        ShowCustomers();
    }
}

三、注意事项

由于对于数据库的操作是具有风险的,因此一定要将对外操作放进try,catch中,防止因为数据库的死机等意外造成系统的崩溃。
另外,一定要将数据库的关闭操作放置在finally中,防止出现内存泄漏的事故。文章来源地址https://www.toymoban.com/news/detail-824071.html

到了这里,关于C#学习(九)——数据库与WPF的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# 访问sqlServer数据库时的连接字符串

    //sql server 身份验证的场合, 连接字符串 private string ConnstrSqlServer = \\\"server=服务器名称;uid=登录名称;pwd=登录密码;database=数据库名称\\\"; //windows 身份验证连接字符串 private string ConnstrWindows = \\\"server=服务器名称;database=数据库名称;Trusted_Connection=SSPI\\\";    // C# 代码中用 SqlClient 的方式

    2024年02月10日
    浏览(68)
  • 数据库课程设计——学生信息管理系统(Sqlserver,C#,Winform)

    目录 需求分析 一.登录功能 二.注册功能 三.管理员登录后跳转到功能页面: 四.学生信息管理(主界面,删除功能在主界面代码中) 五.学生信息添加和修改(设计在一个页面上,修改需要选中行) 六.课程信息管理(删除功能在主界面中)  七.课程信息添加和修改  八.成绩

    2024年02月02日
    浏览(53)
  • asp.net老年大学教务管理信息系统VS开发sqlserver数据库web结构c#编程

    一、源码特点         asp.net 老年大学教务管理信息系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使 用c#语言开发 asp.net老年大学教务管理系统 应用技术:asp.net c#+sqlserver 开发工具:

    2024年02月07日
    浏览(67)
  • asp.net古代服饰系统VS开发sqlserver数据库web结构c#编程包含购物答题功能点

    一、源码特点         asp.net 古代服饰系统 是一套完善的web设计管理系统(含购物 答题),系统采用mvc模式(BLL+DAL+ENTITY)系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 月下逢古代服饰系统1 二、功能

    2024年02月07日
    浏览(50)
  • asp.net文档管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net文档管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net文档管理系统 二、功能介绍 (1)用户管理:对用户信息进行添加、删除、修改和

    2024年02月08日
    浏览(47)
  • asp.net归宿管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net归宿管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net归宿管理系统VS开发sqlserver数据库w 二、功能介绍 一、定时打卡(采用RFID卡)

    2024年02月09日
    浏览(66)
  • asp.net酒店管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net酒店管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 酒店管理系统1 二、功能介绍 后台主要功能: (1)用户管理:对用户信息进行添

    2024年02月07日
    浏览(56)
  • asp.net审计项目管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net审计项目管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 二、功能介绍 (1)科室管理:对科室信息进行添加、删除、修改和查看 (2)权限管

    2024年02月11日
    浏览(55)
  • asp.net教师调课系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net教师调课管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net教师调课系统VS开发sqlserver数据库w 二、功能介绍 教师调课系统要满足以下

    2024年02月09日
    浏览(54)
  • asp.net卷烟物价管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

    一、源码特点         asp.net卷烟物价管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net卷烟物价管理系统VS开发sqlserver数 二、功能介绍 (1)用户管理:对用户信息

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包