方法一:用CommandBuilder
前提条件:
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查询
前提条件:
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();
总结:
方法三:用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); //设置要把哪个表复制到数据库中,并执行
总结:该方法只能执行插入操作,不能执行更新和删除。但是代码简单。