.net OleDbCommandBuilder:GetUpdateCommand用于带参数的Access查询

.net OleDbCommandBuilder:GetUpdateCommand用于带参数的Access查询,.net,ms-access,vb6,oledb,.net,Ms Access,Vb6,Oledb,我正在尝试从正在迁移到.NET的VB6应用程序复制行为。 我有一个Access数据库,其中包含以下几个查询: SELECT FirstName, LastName, Id FROM Users PARAMETERS UserId Long; SELECT users.firstname FROM users WHERE (((users.id) = UserId)) ORDER BY users.firstname; 我可以创建一个DbCommand,并将CommandText设置为“My

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

SELECT FirstName, LastName, Id 
FROM Users
PARAMETERS UserId Long;
SELECT users.firstname
FROM users
WHERE (((users.id) = UserId))
ORDER BY users.firstname;
我可以创建一个DbCommand,并将CommandText设置为“MyQuery”,CommandType设置为CommandType.StoredProcedure,然后正确执行该命令

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

执行此操作时,Update命令(我使用DbCommandBuilder.GetUpdateCommand)的创建失败,并显示以下消息:

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

另外,由于我使用Access作为数据库,所以我更改了SelectCommand,使文本为“Select*fromMyQuery”,类型为“text”

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

问题是,我还有一些带有参数的查询,如下所示:

SELECT FirstName, LastName, Id 
FROM Users
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个场景,这会增加很多工作

有没有其他办法来实现这一点?是否使用参数更新查询(SP)返回的值