问题标签 [sqlcommandbuilder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
287 浏览

c# - SqlCommandBuilder.SetAllValues 不再工作

我为我的SqlCommandbuilder.SetAllValues = false;

几年前,当我实现它时,我使用探查器进行了检查,它工作正常,只有更改的字段在由SqlCommandBuilder.
但现在我发现它不再工作了。
调试时,我注意到在调用之前adapter.Update(table)DataTable列中的值DataRowVersion.OriginalDataRowVersion.Current

我不知道从哪里开始寻找这个,所以我希望有人能把我推向正确的方向。

我在所有表单上都使用绑定,每个控件都绑定到BindingSource绑定到 a 的 a DataTable

这是我的ApplyUpdate命令的完整代码:

0 投票
0 回答
407 浏览

c# - 为什么我需要 SqlCommandBuilder 来更新数据库中的表?

我观看了视频教程并重新编写了相同的代码。我注意到一个不明白,为什么我必须使用 SqlCommandBuilder 来更新表。

我从不使用变量scb。但是,当我注释掉 时scb = new SqlCommandBuilder(sda),我会收到一条错误消息:

“System.InvalidOperationException:更新需要有效的更新命令。”

有人能解释一下,CommandBuilder 有什么功能吗?

文档的注释中它说:

SqlCommandBuilder 将自身注册为由此属性中指定的 SqlDataAdapter 生成的 RowUpdating 事件的侦听器。

但我不明白 CommandBuilder 何时开始行动?

0 投票
1 回答
189 浏览

c# - 如何从原始表定义继承参数大小?

使用 SqlDataAdapter 和 SqlCommandBuilder 为 sql server 创建的更新语句效率低下,如下所述。

这是复制的示例代码:Sql Server:

c#控制台应用程序演示代码:

Console.WriteLine 显示创建的以下 SQL UPDATE 语句:

在 Sql Profiler 中,以下查询越来越多:

现在您可以看到,参数@v 被定义为 VARCHAR(3),而在原始表 dbo.test 中,列 V 被定义为 VARCHAR(50)。

因为值 708 有 3 位,所以传递了 VARCHAR(3)。如果您要传递一个长度为 5 个字符的常量字符串,则参数大小将作为 VARCHAR(5) 传递。该行为是设计解释的这里:SqlParameter.Size 属性如下:

“如果没有明确设置,大小是从指定参数值的实际大小推断出来的。”

我实际上正在寻找一种方法来防止这种情况。因此,作为参数传递的可变长度数据类型的每个组合都会强制生成一个执行计划,这会导致 Sql Server 中成千上万个类似的执行计划被编译消耗 CPU 时间并阻塞大量 RAM 被缓存,并且永远不会重新-用过的。

如果不完全重新设计此应用程序的核心代码,如何影响这种行为?我在这里想做的不仅是使用 CommandBuilder 从原始表中获取 TYPES,而且还获取 SIZE,但似乎无法获取此信息。

0 投票
1 回答
789 浏览

vba - 在 VBA 中导出存储过程的参数

我已经尝试搜索了很多地方,但找不到我要找的东西。

我想在 vba 中编写一个子例程,它将告诉我存储在 SQL Server 上的存储过程的参数。

我知道如何使用来自 excel vba 的参数执行存储过程。我写了一个存储过程,它接受一个存储过程名称并返回参数。所以我可以用这个。但我想也许有更好的方法,我不知道。我找到了一个完美的 VB 的 SQLCommandBuilder 类,但我在 VBA 中需要它。这在 VBA 中是否可用,我只是不知道在哪里激活它?

谢谢

**附加信息:在下面的有用评论之后,我越来越接近我的目标。我希望能够将任何存储过程传递到我的子例程中,它将能够弄清楚它需要多少参数以及它们将是什么

到目前为止,这是我的代码

关于参数。有没有办法将 DataTypeEnum 从值转换为常量。因此,根据此表,我将设置为 adVarWChar 的第一个参数的类型当前为 202

https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/datatypeenum

0 投票
1 回答
237 浏览

c# - C# SqlCeDataAdapter 在从 datagridview 更改值后调用 Adapter.Update() 时不更新数据库中的值

我有一个代码,其中包含本地数据库“database1.sdf”以及带有一些值的表“Employees”。我正在使用 Datagridview.Datasource 属性将数据库中的所有行添加到 datagridview 中。所有行都从表中获取!美好的!当我尝试从 datagridview 更新列值时,它不会从数据库更新。删除行以及添加新行时会发生同样的问题。运行程序时没有出现异常。

}

有人有解决方案吗?

提前致谢

0 投票
0 回答
51 浏览

c# - 将 SQL 日期时间参数定义为可为空

在我的存储过程中,我试图将此日期时间参数定义为可为空的变量。

当我尝试动态检索代码中的参数时。

参数值 IsNullable 设置为 false。

如何将我的 datetime 变量定义为可为空的变量,以便 SqlCommandBuilder.DeriveParameters() 可以将其识别为可为空的参数?

0 投票
1 回答
221 浏览

c# - 当 RowState = Modified 时 SQLDataAdapter.Update() 不更新

我正在尝试设置一个程序,当用户更新项目描述时,将在保存表单时更新数据库。我已经设置了我发现所需的所有内容,但适配器从未更新。它选择和插入很棒,但从不更新。代码如下:

.TableContains()扩展是我构建的一个自制扩展,用于检查表以查看值是否存在。它运行完美,并将 PK 已存在的行设置为已修改,将 PK 不存在的行设置为已添加。

_LoadAll();方法只是在DataTables对数据库进行更改后重新加载所有内容的方法。

0 投票
0 回答
377 浏览

c# - 在插入或更新数据库之前修改任何 SQL 命令字符串以删除特定列

在向表中添加或更新记录之前,我正在尝试删除所有表中存在的列。由于 Azure 的某些功能以及在移动设备上同步表,这是必要的。在下面的示例中,我将删除名为“Col4”。

到目前为止,以下是我最好的方法。在使用 清理 SQL 命令后,它会进行简单的字符串替换SqlCommandBuilder(请参阅代码下方的清理后的 SQL 示例)。使用字符串替换删除列后,我替换SqlCommandBuilder. 我希望使用字符串生成器作为删除列的一种方式,因为与commandText参数相比,格式应该是一致的,参数可能会有很大差异。但是我担心这种方法充满了问题,例如我可能还需要修改更新后的 SQL 命令中的 VALUES 部分,但这可能很困难,因为我正在处理具有不同列数的不同表. 无论如何,如您所见,我在代码中指示的位置出现错误。

有没有更简单的方法来删除 da.InsertCommand = \command 之前没有指定值的列

原文da.SelectCommand.CommandText

更新da.SelectCommand.CommandText

0 投票
1 回答
377 浏览

datagridview - 删除记录时如何重置表的标识列?

我有一个 Datagridview,其中填充了来自 SQL Server 的一些数据。这完全没有问题。

每次我在表中插入或更新记录时,我都想对一个表IDENTITY名的列进行 RESEED CarID,但是 IDS 的顺序似乎不好,因为有时会删除记录。

在我的代码中,我使用“SQLCOMMANDBUILDER”来执行插入、更新或删除操作。

我已经尝试了下面的代码,但我抛出了一个异常错误,上面写着“找不到表 0”。

我应该在哪里修??

0 投票
1 回答
827 浏览

sql - 如何将参数传递给数据适配器?

我有下面的代码,我使用 dataadapter 从 sql 数据库表中选择数据,但我抛出了一个错误:

"必须声明标量变量"@UserName"

代码错误在哪里???

我已经尝试了下面的代码,它会引发错误“必须声明标量变量”@UserName”