ODBC 命令不提供插入记录的计数
本文关键字:记录 插入 命令 ODBC | 更新日期: 2023-09-27 18:32:19
我正在使用 ODBC 连接连接到数据库。当我使用 insert 语句执行 OdbcCommand.ExecuteNonQuery
时,记录入到表中,但该方法返回 0。
ExecuteNonQuery
返回受影响的记录数。它在删除和更新的情况下工作正常,但在插入的情况下不起作用。
query = "Insert into table1 (field1, field2) values (1,2)";
OdbcConnection = _remoteconn = new OdbcConnection(constring);
OdbcCommand cmd = new OdbcCommand(query, _remoteconn);
recordsAffected = cmd.ExecuteNonQuery();
ODBC 不是驱动程序 - 它是驱动程序的包装器。此问题的答案将取决于您使用的基础 ODBC 驱动程序,该驱动程序通常在连接字符串中指定。
MSDN 文档实际上更像是一种期望或建议,但 ODBC 接口不能强制驱动程序返回特定结果。可能是驱动程序具有一些干扰结果的优化或设置,这与 SQL Server NO COUNT 设置(将覆盖驱动程序尝试报告受影响的行等)不同。
有关 ODBC 工作原理的更全面解释,请参阅维基百科:
http://en.wikipedia.org/wiki/ODBC
"由于不同的技术具有不同的功能,因此大多数 ODBC 驱动程序不会实现 ODBC 标准中定义的所有功能。一些驱动程序提供标准未定义的额外功能。
如果您告诉我们您使用的是哪种驱动程序,则可能会有助于找到解决方案。
编辑
据我所知,所讨论的 ODBC API 函数是 SQLRowCount 函数,定义如下:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms711835(v=vs.85).aspx
标准,必须实现此函数才能使驱动程序被视为符合 ODBC。(这并不是说该函数将返回预期或正确的结果,只是它在那里)。
根据Transoft文档(第67页),我已经能够挖掘出SQLRowCount函数的实现。没有以任何方式提及此功能被禁用或任何必需的配置。
鉴于上述情况,我会直接联系供应商。它们的实现似乎存在错误或未记录的"功能"。
我遇到了类似的问题,这是因为相关数据库的 ODBC 驱动程序与数据库的版本不同。
使用以下命令检查数据库中的版本:
select @@version
在 ODBC 中(至少对于 Windows XP) 位于:
控制面板 -> 管理工具 -> Microsoft ODBC 源 管理员 ->驱动程序 ->在此处检查您的列版本 数据库
如果它们不同,那可能是问题所在!
试试
ExecuteReader
而不是
ExecuteNonQuery
并在 SQL 句子中使用 select 获取值
using System;
using System.Data;
using System.Data.Odbc;
class myOdbc
{
static void Main()
{
OdbcConnection myOdbcCommandConnection = new OdbcConnection("...");
myOdbcCommandConnection.Open();
OdbcCommand myOdbcCommand = myOdbcCommandConnection.CreateCommand();
myOdbcCommand.CommandText = "INSERT INTO table1 (field1, field2) VALUES (?, ?)";
myOdbcCommand.Parameters.Add("@field1", OdbcType.Int);
myOdbcCommand.Parameters.Add("@field2", OdbcType.Int);
myOdbcCommand.Parameters["@field1"].Value = 1;
myOdbcCommand.Parameters["@field2"].Value = 2;
Console.WriteLine("Number of Rows Affected is: {0}", myOdbcCommand.ExecuteNonQuery());
myOdbcCommandConnection.Close();
Console.ReadKey();
}
}
MSDN for OdbcCommand 声明如下:
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.
你能发布更多代码吗?您肯定会忘记获得的数字,或者没有插入任何记录(!!!
更新
或者,正如注释中正确指出的那样,ODBC 驱动程序本身要么有错误,要么根本没有提供此功能(您没有获得预期的记录计数)。