代码如下:
using System;
using System.Data;
using System.Data.SqlClient;
namespace UpdateOfSql
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test
{
public static void Main()
{
string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
SqlConnection scon=new SqlConnection(s);
scon.Open(); SqlCommand mycomm=new SqlCommand("update stu set sex='female' where stuName='Steven'",scon);
SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);
da.UpdateCommand=mycomm;
DataSet ds=new DataSet();
da.Fill(ds,"stu");
da.Update(ds,"stu");
ds.AcceptChanges();
DataTable dt=ds.Tables["stu"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
}
scon.Close(); }
}
}为什么该不了数据库呢?如果加上一条语句 da.UpdateCommand.ExecuteNonQuery,数据库是可以修改了,但是dataset中并没有修改。换句话说,da.Update(ds,"stu");ds.AcceptChanges();这两句在这个程序里面好像根本没有执行阿。我的问题就是,对于SqlDataAdapter,它有InsertCommand,UpdateCommand,DeleteCommand,那它的update()方法要怎么用才可以使得dataset和数据库中的数据都被修改呢?
using System;
using System.Data;
using System.Data.SqlClient;
namespace UpdateOfSql
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test
{
public static void Main()
{
string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
SqlConnection scon=new SqlConnection(s);
scon.Open(); SqlCommand mycomm=new SqlCommand("update stu set sex='female' where stuName='Steven'",scon);
SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);
da.UpdateCommand=mycomm;
DataSet ds=new DataSet();
da.Fill(ds,"stu");
da.Update(ds,"stu");
ds.AcceptChanges();
DataTable dt=ds.Tables["stu"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
}
scon.Close(); }
}
}为什么该不了数据库呢?如果加上一条语句 da.UpdateCommand.ExecuteNonQuery,数据库是可以修改了,但是dataset中并没有修改。换句话说,da.Update(ds,"stu");ds.AcceptChanges();这两句在这个程序里面好像根本没有执行阿。我的问题就是,对于SqlDataAdapter,它有InsertCommand,UpdateCommand,DeleteCommand,那它的update()方法要怎么用才可以使得dataset和数据库中的数据都被修改呢?
http://blog.csdn.net/knight94/archive/2006/03/17/627556.aspx
sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" ); sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear(); sqlDAdapter.Fill( sqlRecordSet, "EmployeeInfo" );
最后这个fill往dataset里填充的就是更新后的数据吗?
-_-||如果没有绑定,那么在设定DataAdapter的UpdateCommand、InsertCommand等等,这些是必须的,然后执行
sqlDAdapter.Update( sqlRecordSet, "EmployeeInfo" );
即可
SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon)//初始adapter da.UpdateCommand=mycomm;//设adater的updatecomand属性
DataSet ds=new DataSet();
da.Fill(ds,"stu"); //填充
da.Update(ds,"stu");//更新
ds.AcceptChanges();
那还没有更新是怎么回事阿
干吗非要分得那么清楚,一定要说dataset和数据库。
应用dataset的目的本身是为了更方便的操作数据库,你这样好像是多此一举。
前面加上一条语句
this.BindingContext[sqlRecordSet, "EmployeeInfo"].EndCurrentEdit();就行了
using System.Data;
using System.Data.SqlClient;
namespace UpdateOfSql
{
/// <summary>
/// test 的摘要说明。
/// </summary>
public class test
{
public static void Main()
{
string s="server=(local);uid=guest;pwd=guest;database=Mytestdatabase";
SqlConnection scon=new SqlConnection(s);
scon.Open(); SqlDataAdapter da=new SqlDataAdapter("select * from stu",scon);
SqlCommandBuilder cmd = new SqlCommandBuilder(da);
DataSet ds=new DataSet();
da.Fill(ds,"stu"); DataRow dr = ds.Tables[0].Rows.NewRow();
dr["sex"] = "female";
dr["stuName"] = "Steven";
ds.Tables[0].Rows.Add(dr);
da.Update(ds,"stu");
ds.AcceptChanges();
DataTable dt=ds.Tables["stu"];
foreach(DataRow dr in dt.Rows)
{
Console.WriteLine(dr["stuName"]+ " "+ dr["studentid"]+ " "+dr["sex"] );
}
scon.Close(); }
}
}
da.Update(ds,"stu");//更新
所以我最后将代码改成了这样子:
da.Fill(ds,"stu");//填充
DataRow[] dr=ds.Tables[0].Select("stuname='steven'");//找到要更改的行
for(int i=0;i<dr.Length;i++)
dr[i]["sex"] = "female";//修改
da.Update(ds,"stu");//更新
ds.AcceptChanges();这样子就可以了。
再次感谢大家。