vlambda博客
学习文章列表

WPF 连接MySql数据库,对表格进行增、删、改、查


连接数据库之前需要本地具有这个数据库,已经相应的表格。可以通过button执行以下代码,实现增删改查的功能

连接数据库

 
   
   
 
  1. String connetStr = "server=127.0.0.1;port=3306;user=root;password=123456; database=t1;";

  2. // server=127.0.0.1/localhost 代表本机,端口号port默认是3306可以不写,t1是数据库名称。

  3. MySqlConnection conn = new MySqlConnection(connetStr);

  4. //这是连接语句

  5. conn.Open();

  6. //打开通道,建立连接

连接数据库的时候可能会报错,需要使用try catch语句捕捉异常。

查询数据库

 
   
   
 
  1. //在这里使用代码对数据库进行查询

  2. string sql = "select * from new_table";//new_table是数据库中表的名称

  3. MySqlCommand cmd = new MySqlCommand(sql, conn);//mysqlcommand是执行sql语句

  4. MySqlDataReader reader = cmd.ExecuteReader();//执行ExecuteReader()返回一个MySqlDataReader对象

此时reader中就包含了表中的所有数据,可以建立一个泛型集合把数据存储到里面,然后把泛型集合和Datagrid的itemsource绑定,显示在软件中。

通过Datagrid展示表格

1.设置Gatagrid

以下是xaml代码,AutoGenerateColumns是不自动生成列的属性。

 
   
   
 
  1. <DataGrid x:Name="dg"

  2. Margin="0,282,0,0"

  3. Grid.Row="1"

  4. AutoGenerateColumns="False"

  5. >

  6. <DataGrid.Columns>

  7. <DataGridTextColumn

  8. Width="*"

  9. Binding="{Binding source}"

  10. Header="资源" />

  11. <DataGridTextColumn

  12. Width="*"

  13. Binding="{Binding number}"

  14. Header="数量" />

  15. </DataGrid.Columns>

执行完查询语句,需要通过泛型集合与itemsource绑定显示表格,这篇文章在mysql的数据库表格只有资源和数量两项。datagrid中资源列绑定source,数量列绑定number。

2.创建类

为保证泛型集合中的每个元素都具有source和number两个参数,这里需要创建相应的类,使其包含这两个元素。

 
   
   
 
  1. public class Test

  2. {

  3. public string source { get; set; }

  4. public string number { get; set; }

  5. }

3.创建泛型集合

 
   
   
 
  1. //建立list泛型集合,以便于将所有数据库的数据存储到这个泛型集合中。

  2. ObservableCollection<Test> testList = new ObservableCollection<Test>();

4.将reader中的数据赋值到泛型集合上

 
   
   
 
  1. while (reader.Read())//初始索引是-1,执行读取下一行数据,返回值是bool

  2. {

  3. //逐步读取数据库中的数据,然后添加到集合中

  4. testList.Add(new Test()

  5. {

  6. source = reader.GetString("资源"),

  7. number = reader.GetString("数量")

  8. });

  9. }

  10. //dg为datagrid的名字,将其资源与testlist绑定,可以将数据库中的数据通过testlist这个泛型集合展示在DataGrid中!。

  11. dg.ItemsSource = testList;

完成后效果图如下

修改数据库

目前没想好怎么直接通过datagrid进行修改数据库,以下方法是通过textbox控件进行的,如果大家有更好的方法,可以评论去提点一下。

1.界面中设置textbox和label

在wpf界面中设置好textbox和label,还有相应的按钮,xaml代码如下

 
   
   
 
  1. <StackPanel HorizontalAlignment="Left" Height="41" Margin="140,25,0,0" VerticalAlignment="Top" Width="100">

  2. <StackPanel Orientation="Horizontal">

  3. <Label Content="资源" Width="50"></Label>

  4. <Label Content="数量" Width="50"></Label>

  5. </StackPanel>

  6. <StackPanel Orientation="Horizontal">

  7. <TextBox Name="AddSource" Background="SeaGreen" Width="50" >

  8. </TextBox>

  9. <TextBox Name="AddNurmber" Background="Ivory" Width="50" >

  10. </TextBox>

  11. </StackPanel>

  12. </StackPanel>

  13. <Button Content="查询数据" HorizontalAlignment="Left" Margin="54,115,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>

  14. <Button Content="删除数据" HorizontalAlignment="Left" Margin="54,23,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_4"/>

  15. <Button Content="增加数据" HorizontalAlignment="Left" Margin="54,52,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_3"/>

  16. <Button Content="修改数据" HorizontalAlignment="Left" Margin="54,91,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_5" />

  17. <Button Content="导出数据" HorizontalAlignment="Left" Margin="623,25,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_6"/>

效果如下, margin可以忽视,懒得设置grid.columns,就直接摆到相应位置。导出数据按钮也可以忽视,下一篇文章整理EXCEL批量导入导出。WPF 连接MySql数据库,对表格进行增、删、改、查

2.修改数据按钮的后台代码

修改数据关键语句是updata。where表示当资源=@source时,数量=@number,@*表示某一数值。

 
   
   
 
  1. cmd.CommandText = "UPDATE new_table SET `数量` = @number WHERE (`资源` =@source)";

  2. cmd.Parameters.AddWithValue("@source", AddSource.Text);

  3. cmd.Parameters.AddWithValue("@number", AddNurmber.Text);

  4. cmd.ExecuteNonQuery();

以下是完整代码,大概流程是先连接数据库,然后通过sql语句进行修改。其中AddSource和Addnurmber对应两个textbox的名字。

 
   
   
 
  1. String connetStr = "server=127.0.0.1;port=3306;user=root;password=123456; database=t1;";

  2. // server=127.0.0.1/localhost 代表本机,端口号port默认是3306可以不写,t1是数据库名称。

  3. MySqlConnection conn = new MySqlConnection(connetStr);

  4. conn.Open();//打开通道,建立连接,可能出现异常,使用try catch语句

  5. MySqlCommand cmd;

  6. cmd = conn.CreateCommand();

  7. //commandtext 的语句对应于mysql中的语句, 需要有值的地方可以用@**表示,然后再下面添加 parameter.addwithvalue来确定这个值。

  8. cmd.CommandText = "UPDATE new_table SET `数量` = @number WHERE (`资源` =@source)";

  9. cmd.Parameters.AddWithValue("@source", AddSource.Text);

  10. cmd.Parameters.AddWithValue("@number", AddNurmber.Text);

  11. cmd.ExecuteNonQuery();

  12. MessageBox.Show("修改成功");

以下对1#货车数量修改成100修改后如图,修改后可以再次执行查询数据功能,保证datagrid显示的表格实时更新。

增加和删除与修改数据

增加和删除与修改数据前面代码相似。只给出关键代码,首先是删除数据的代码

 
   
   
 
  1. cmd.CommandText = "DELETE FROM new_table WHERE(`资源` = @source )";

  2. cmd.Parameters.AddWithValue("@source", AddSource.Text);

  3. cmd.ExecuteNonQuery();

增加数据的代码

 
   
   
 
  1. cmd.CommandText = "INSERT INTO new_table(资源,数量) VALUES(@source,@number)";

  2. cmd.Parameters.AddWithValue("@source", AddSource.Text);

  3. cmd.Parameters.AddWithValue("@number", AddNurmber.Text);

  4. cmd.ExecuteNonQuery();