OleDbCommandBuilder:带参数的Access查询的GetUpdateCommand

时间:2013-12-31 17:43:31

标签: .net ms-access vb6 oledb

我正在尝试从我正在迁移到.NET的VB6应用程序复制行为。 我有一个Access数据库,其中包含以下几个查询:

SELECT FirstName, LastName, Id 
FROM Users

我可以创建一个DbCommand并将CommandText设置为“MyQuery”,将CommandType设置为CommandType.StoredProcedure并正确执行命令。

要复制VB6应用程序中的行为,我尝试从该命令创建更新命令(我创建一个新的dataAdapter并将创建的命令指定为SelectCommand)。

这样做,更新命令(我使用DbCommandBuilder.GetUpdateCommand)的创建失败,并显示以下消息:

“对于不返回任何基表信息的SelectCommand,不支持动态SQL生成。”

作为替代方案,由于我使用Access作为数据库,我更改了SelectCommand,因此文本为“Select * from MyQuery”,类型为“Text”。

这可以正常工作,我可以成功调用DbCommandBuilder.GetUpdateCommand。

问题是我也有一些参数查询,如下:

PARAMETERS UserId Long;
SELECT users.firstname
FROM users
WHERE (((users.id) = UserId))
ORDER BY users.firstname;

当我将SelectCommand文本设置为“Select * from MyQueryWithParams”并将类型设置为“Text”(我将参数传递给命令)时,选择成功完成。

但是,当我调用DbCommandBuilder.GetUpdateCommand时,它会引发异常:

“OleDbCommand.Prepare方法要求类型'14'的参数具有明确设置的精度和比例。”

我没有看到如何自动生成更新命令,包括现有参数。

我知道我可以创建一个新的存储过程来处理更新,但是在应用程序中有100个场景,这会增加很多工作。

有没有其他方法可以实现这一目标?使用参数?

更新Query(SP)返回的值

0 个答案:

没有答案