日期:2014-05-19  浏览次数:20480 次

SqlDataAdapter的UpdateCommand怎样做才能更新到数据库
SqlConnection   con   =   new   SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[ "ConnectionString "]);
        SqlCommand   cmd   =   null;
SqlParameter   parm   =   null;
con.Open();

string   updateSQL   =   "UPDATE   TABLE2   SET   AA=@AA   WHERE   ID=@ID ";
SqlDataAdapter   sda   =   new   SqlDataAdapter( "SELECT   *   FROM   TABLE2 ",con);
DataSet   ds   =   new   DataSet();
sda.Fill(ds, "TABLE2 ");

cmd   =   new   SqlCommand(updateSQL,con);
parm   =   new   SqlParameter();
cmd.Parameters.Add( "@AA ",SqlDbType.VarChar,50, "AA ");
cmd.Parameters.Add( "@ID ",SqlDbType.Int,4, "ID ");
cmd.Parameters[ "@AA "].Value   =   "AAA ";
cmd.Parameters[ "@ID "].Value   =   "1 ";
parm.SourceVersion   =   DataRowVersion.Original;
sda.UpdateCommand   =   cmd;
                                sda.Update(ds, "TABLE2 ");

更新不到数据库,谁能帮我改一下,可不可以不用SelectCommand与SqlCommandBuilder

------解决方案--------------------
sda.UpdateCommand你需要执行一下这个cmd的吧sda.UpdateCommand.excuteNonQuery..
------解决方案--------------------
cmd.Parameters[ "@AA "].Value = "AAA ";
cmd.Parameters[ "@ID "].Value = "1 ";
parm.SourceVersion = DataRowVersion.Original;
sda.UpdateCommand = cmd;
sda.UpdateCommand.excuteNonQuery..//大概这么拼,呵呵。后面那句sad.Update不需要的吧

------解决方案--------------------
不要的。

只是,你DataSet根本就没有修改过,你要更新什么数据?!

数据的跟该是在dataset中更改,改好了再sda.Update()!!
------解决方案--------------------
DataAdapter 的 Update 方法可调用来将 DataSet 中的更改解析回数据源。与 Fill 方法类似,Update 方法将 DataSet 的实例和可选的 DataTable 对象或 DataTable 名称用作参数。DataSet 实例是包含已作出的更改的 DataSet,而 DataTable 标识从其中检索更改的表。

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

Command 参数可用于为 DataSet 中每个已修改行的 SQL 语句或存储过程指定输入和输出值。有关更多信息,请参见将参数用于 DataAdapter。

如果 DataTable 映射到单个数据库表或从单个数据库表生成,则可以利用 DbCommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。有关更多信息,请参见自动生成命令。

Update 方法会将更改解析回数据源;但是自上次填充 DataSet 以来,其他客户端可能已修改了数据源中的数据。若要使用当前数据刷新 DataSet,请使用 DataAdapter 和 Fill 方法。新行将添加到该表中,更新的信息将并入现有行。Fill 方法通过检查 DataSet 中行的主键值及 SelectCommand 返回的行来确定是要添加一个新行还是更新现有行。如果 Fill 方法发现 DataSet 中某行的主键值与 SelectCommand 返回结果中某行的主键值相匹配,则它将用 SelectCommand 返回的行中的信息更新现有行,并将现有行的 RowState 设置为 Unchanged。如果 SelectCommand 返回的行所具有的主键值与 DataSet 中行的任何主键值都不匹配,则 Fill 方法将添加 RowState 为 Unchanged 的新行。

注意
如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不会为生成的 DataTable 设置 PrimaryKey 值。您必须自己定义 PrimaryKey 以确保正确解析重复行。有关更多信息,请参见为表定义主键。


要处理在调用 Update 方法时可能发生的异常,可以使用 RowUpdated 事件响应更新行时发生的错误(请参见使用 DataAdapter 事件),也可以在调用 Update 之前将 DataAdapter.ContinueUpdateOnError 设置为 true,并在更新完成后响应特定行的 RowError 属性中存储的错误信息(请参见添加和读取行错误信息)。

注意
如果对 DataSet、DataTable 或 DataRow 调用 AcceptChanges,则将使 DataRow 的所有 Original 值都将被