C#中两种通过DataTable和DataAdapter操作数据库的方法

使用DBMS:Sql Server2012

关于DataTable与DataAdapter对数据库进行操作,MSDN上给出了很明确的解释:

DataAdapter 遇到对 DataRow 所做的更改时,它将使用 InsertCommand、UpdateCommand 或 DeleteCommand 来处理该更改。 这样,您就可以通过在设计时指定命令语法并在可能时通过使用存储过程来尽量提高 ADO.NET 应用程序的性能。 在调用 Update 之前,必须显式设置这些命令如果调用了 Update 但不存在用于特定更新的相应命令(例如,不存在用于已删除行的 DeleteCommand),则会引发异常。

有以下两种方法:

1. 建立SqlAdapter后通过Fill填充进相关DataTable,然后在DataTable上进行数据操作,最后通过SqlCommandBuilder“自动”建立所需要的SqlCommand对象。这种方法比较便捷。

SqlConnection conn = new SqlConnection(connString);
String selectString = "select * from student_table";
SqlDataAdapter sdAdapter = new SqlDataAdapter(selectString,conn);

//建立DataAdapter与DataSet、DataTable之间的关系
DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
sdAdapter.Fill(ds,"t_table");
dt1 = ds.Tables["t_table"];

//向DataTable中添加新的DataRow,类似于进行Insert操作
DataRow row = dt1.NewRow();
row["name"] = name;
row["school"] = school;
dt1.Rows.Add(row);

//关键的一步
new SqlCommandBuilder(sdAdapter);

try{
//将DataTable中的变化返回给数据库
    sdAdapter.Update(ds,"t_table");
} catch (InvalidOperationException){
    MessageBox.Show("error!");
}
2.第二种即自己显式地定义各个方法,这种方法需要对 SqlParameter中各个参数有所了解。

SqlCommand icmd = new SqlCommand("insert into student_table values (@NAME,@SCHOOL)", conn);
SqlParameter pname = new SqlParameter("@NAME", SqlDbType.NChar, 10, "name");
SqlParameter pschool = new SqlParameter("@SCHOOL", SqlDbType.NChar, 10, "school");
icmd.Parameters.Add(pname);
icmd.Parameters.Add(pschool);
sdAdapter.InsertCommand = icmd;

SqlCommand dcmd = new SqlCommand("delete student_table where name = @NAME and school = @SCHOOL", conn);
dcmd.Parameters.Add("@NAME", SqlDbType.Char, 12, "name");
dcmd.Parameters.Add("@SCHOOL", SqlDbType.Char, 12, "school");            
sdAdapter.DeleteCommand = dcmd;

SqlCommand ucmd = new SqlCommand("update set school = @SCHOOL where name = @NAME", conn);            
ucmd.Parameters.Add("@NAME", SqlDbType.Char, 12, "name");            
ucmd.Parameters.Add("@SCHOOL", SqlDbType.Char, 12, "school");            
sdAdapter.UpdateCommand = ucmd;
还有任何问题欢迎和我交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值