gpt4 book ai didi

.net - 是否可以使用 SqlCommandBuilder(不使用存储过程)在插入时检索 IDENTITY 列值?

转载 作者:行者123 更新时间:2023-12-03 21:20:42 25 4
gpt4 key购买 nike

仅供引用:我在 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 集合被重置为原始集合(丢失附加的添加参数)。

有谁知道这个问题的答案???

最佳答案

这是我之前遇到的一个问题,错误似乎是当你打电话时
da.Update(ds);
插入命令的参数数组被重置为从您的命令生成器创建的初始列表,它会删除您为身份添加的输出参数。

解决方案是创建一个新的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, 0, 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);

关于.net - 是否可以使用 SqlCommandBuilder(不使用存储过程)在插入时检索 IDENTITY 列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/136536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com