首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改SqlCommandBuilder.InsertCommand的命令文本?

如何更改SqlCommandBuilder.InsertCommand的命令文本?
EN

Stack Overflow用户
提问于 2019-04-08 23:17:05
回答 2查看 375关注 0票数 0

我想修改SqlCommandBuilder以在insert之后检索SCOPE_IDENTITY()值,而不为每个2000+表创建存储过程。

我正在尝试这段代码:

代码语言:javascript
复制
SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM dbo.Categories", connection);                          

DataTable categories = new DataTable();
adapter.Fill(categories);
...

SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.InsertCommand = builder.GetInsertCommand();
adapter.InsertCommand.CommandText = adapter.InsertCommand.CommandText+
            +"; SELECT SCOPE_IDENTITY() AS SCOPEIDENTITY";
            ...
adapter.Update(categories);

但无论我输入什么,DataAdapter都会执行开头的SQL语句,而不是我的更改。

即使这样的文本也不会产生SQL错误:

代码语言:javascript
复制
adapter.InsertCommand.CommandText = "Hello world";
adapter.Update(categories);

SQL Server事件探查器显示此SQL语句而不是错误。

代码语言:javascript
复制
exec sp_executesql N'INSERT INTO [dbo].[Categories] ([CategoryName]) VALUES (@p1)',N'@p1 nvarchar(12)',@p1=N'New Category'
EN

回答 2

Stack Overflow用户

发布于 2019-04-08 23:59:26

SqlCommand manual page说明如下:

您可以重置CommandText属性并重用SqlCommand对象。但是,必须先关闭SqlDataReader,然后才能执行新命令或以前的命令。

看起来您使用的不是SqlDataReader,但这可能适用于您正在使用的SqlDataAdapter。

票数 0
EN

Stack Overflow用户

发布于 2020-10-28 23:39:45

代码语言:javascript
复制
builder.GetInsertCommand().Clone();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55576677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档