加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.net – 可以使用SqlCommandBuilder(不使用Stored Proc)在insert

发布时间:2020-12-12 16:46:48 所属栏目:MsSql教程 来源:网络整理
导读:FYI:我正在运行dotnet 3.5 SP1 我正在尝试在执行更新(使用SqlDataAdapter和SqlCommandBuilder)之后检索一个标识列的值到我的数据集中. 执行SqlDataAdapter.Update(myDataset)后,我想能够读取myDataset.tables(0).Rows(0)(“ID”)的自动分配的值,但它是System
FYI:我正在运行dotnet 3.5 SP1

我正在尝试在执行更新(使用SqlDataAdapter和SqlCommandBuilder)之后检索一个标识列的值到我的数据集中.
执行SqlDataAdapter.Update(myDataset)后,我想能够读取myDataset.tables(0).Rows(0)(“ID”)的自动分配的值,但它是System.DBNull(尽管事实上该行已插入).

(注意:我不想明确地写一个新的存储过程来做到这一点!)

经常发布的一种方法是:http://forums.asp.net/t/951025.aspx修改SqlDataAdapter.InsertCommand和UpdatedRowSource,如下所示:

SqlDataAdapter.InsertCommand.CommandText += "; SELECT MyTableID = SCOPE_IDENTITY()"
InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord

显然,这对过去的许多人来说似乎是有效的,但对我来说并不奏效.

另一种技术:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=619031&SiteID=1对我来说不起作用,因为在执行SqlDataAdapter.Update之后,SqlDataAdapter.InsertCommand.Parameters集合将重置为原始(丢失附加的附加参数).

有人知道这个答案吗?

解决方法

这是一个我以前遇到的问题,这个bug似乎是在你打电话时
da.Update(DS);
insert命令的参数数组将重置为从命令构建器创建的初始列表,它将删除您添加的身份的输出参数.

解决方案是创建一个新的dataAdapter并复制命令,然后使用这个新的da.update(ds);

喜欢

SqlDataAdapter da = new SqlDataAdapter("select Top 0 " + GetTableSelectList(dt) + 
"FROM " + tableName,_sqlConnectString);
SqlCommandBuilder custCB = new SqlCommandBuilder(da);
custCB.QuotePrefix = "[";
custCB.QuoteSuffix = "]";
da.TableMappings.Add("Table",dt.TableName);

da.UpdateCommand = custCB.GetUpdateCommand();
da.InsertCommand = custCB.GetInsertCommand();
da.DeleteCommand = custCB.GetDeleteCommand();

da.InsertCommand.CommandText = String.Concat(da.InsertCommand.CommandText,"; SELECT ",GetTableSelectList(dt)," From ",tableName," where ",pKeyName,"=SCOPE_IDENTITY()");

SqlParameter identParam = new SqlParameter("@Identity",SqlDbType.BigInt,pKeyName);
identParam.Direction = ParameterDirection.Output;
da.InsertCommand.Parameters.Add(identParam);

da.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

//new adaptor for performing the update                     
SqlDataAdapter daAutoNum = new SqlDataAdapter();
daAutoNum.DeleteCommand = da.DeleteCommand;
daAutoNum.InsertCommand = da.InsertCommand;
daAutoNum.UpdateCommand = da.UpdateCommand;

daAutoNum.Update(dt);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读