WPF C# 保存DataGrid数据到SQL数控的四种方法

方法一:用CommandBuilder

前提条件:

  1. DataGrid中的数据是从SQL数据库中获取的,而不是从其他地方导入的(具体原因不知);
  2. 它只能处理一个表;
  3. 底层数据库表必须有主键或唯一键;
  4. SqlAdapter的SelectCommand属性必须有一个包含主键列的查询;
string connString = @"Server=localhost\SQLEXPRESS;Database=StaffAdmin;Trusted_Connection=True;";
SqlConnection connection = new SqlConnection(connString);  //创建数据库的SqlConnection
string sql = @"Select * from Staff";  
SqlDataAdapter da = new SqlDataAdapter();  //创建SqlDataAdapter的实例da
da.SelectCommand = new SqlCommand(sql, connection);  //设置da的SelectCommand的SQL query和SqlConnection
SqlCommandBuilder cb = new SqlCommandBuilder(da); //创建SqlCommandBuilder的实例cb,并设置其SqlDataAdapter为da
DataTable dt = new DataTable();
dt = ((DataView)StaffAdminView.ItemsSource).Table;  //用dt获取DataGrid的table
da.Update(dt);  //更新到数据库

总结:在DataGrid中插入,更改和删除数据,都可以通过此段代码更新到数据库,代码简单。


方法二:用SQL查询 

前提条件:

  1. 它只能处理一个表;
  2. 底层数据库表必须有主键或唯一键;
  3. 查询命令必须包含一个主键;
DataTable dt = new DataTable();
dt = ((DataView)StaffAdminView.ItemsSource).Table;  //用dt获取DataGrid的table

string connString = @"Server=localhost\SQLEXPRESS;Database=StaffAdmin;Trusted_Connection=True;";
SqlConnection connection = new SqlConnection(connString);  //创建数控的SqlConnection foreach (DataRow dr in dt.Rows) //遍历dt里所有row,并执行insert和update { connection.Open(); try { string sql = "insert into staff (Name, ID) values ("'" + dr[0] + "'," + "'" + dr[1] + "'")"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); //执行insert命令 } catch (Exception ex) { if (ex.Message.ToString().Contains("Violation of PRIMARY KEY")) //catch try块中的exception,如果是Violation of PRIMARY KEY异常,说明该记录在数据库中已存在,则执行update命令 { string sql = "Update Staff set Name='" + dr[0] + "',StaffGroup='" + dr[2] + "',MobilePhone='" + dr[3] + "',Gender='" + dr[4] + "',School='" + dr[5] + "',Grade='" + dr[6] + "'where ID=" + dr[1]; SqlCommand cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); //执行update命令 } } } connection.Close();

总结:

  1. 该方法可以执行插入和更新操作,不能执行删除操作;
  2. DataGrid中的数据可以是从其他地方获取的;

方法三:用SqlDataAdapter的InsertCommand、UpdateCommand和DeleteCommand属性

下面以InsertCommand属性为例

DataTable dt = new DataTable();
dt = ((DataView)StaffAdminView.ItemsSource).Table;  //用dt获取DataGrid的table SqlCommand insterCmd = new SqlCommand("insert into Staff values (@Name,@ID)", connection); //创建SqlCommand的实例insterCmd,并设置其SQL查询语句和SqlConnection insterCmd.Parameters.Add("@Name", SqlDbType.VarChar, 10, "Name"); //设置要插入的第一个字段的Parameters属性 insterCmd.Parameters.Add("@ID", SqlDbType.Char, 18, "ID"); //设置要插入的第二个字段Parameters属性 SqlDataAdapter da = new SqlDataAdapter(); //创建SqlDataAdapter的一个实例da da.InsertCommand = insterCmd; //设置da的InsertCommand属性 da.Update(dt); //更新到数据库

总结:该方法对主键和DataGrid的数据来源没有要求

方法四:用SqlBulkCopy更新数据库


string connString = @"Server=localhost\SQLEXPRESS;Database=StaffAdmin;Trusted_Connection=True;";  //设置数据库的connection string

DataTable dt = new DataTable();
dt = ((DataView)StaffAdminView.ItemsSource).Table;  //用dt获取DataGrid的table SqlBulkCopy sqlBC = new SqlBulkCopy(connString, SqlBulkCopyOptions.UseInternalTransaction); //创建SQLBulkCopy的实例sqlBC,并设置其connection string sqlBC.DestinationTableName = "Staff"; //设置要复制到数据库中的哪个表 sqlBC.WriteToServer(dt); //设置要把哪个表复制到数据库中,并执行
总结:该方法只能执行插入操作,不能执行更新和删除。但是代码简单。

你可能感兴趣的:(WPF C# 保存DataGrid数据到SQL数控的四种方法)