C# ODBC命令不提供插入记录的计数

C# ODBC命令不提供插入记录的计数,c#,mysql,.net,odbc,C#,Mysql,.net,Odbc,我正在使用ODBC连接连接到数据库。当我使用insert语句执行OdbcCommand.ExecuteNonQuery时,记录被插入到表中,但该方法返回0 ExecuteOnQuery返回受影响的记录数。它在删除和更新的情况下工作正常,但在插入的情况下不工作 query = "Insert into table1 (field1, field2) values (1,2)"; OdbcConnection = _remoteconn = new OdbcConnection(constring

我正在使用ODBC连接连接到数据库。当我使用insert语句执行OdbcCommand.ExecuteNonQuery时,记录被插入到表中,但该方法返回0

ExecuteOnQuery返回受影响的记录数。它在删除和更新的情况下工作正常,但在插入的情况下不工作

query = "Insert into table1 (field1, field2) values (1,2)";

OdbcConnection = _remoteconn = new OdbcConnection(constring);
OdbcCommand cmd = new OdbcCommand(query, _remoteconn);
recordsAffected = cmd.ExecuteNonQuery();
声明如下:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.
你能发布更多的代码吗?你肯定会忘记你得到的号码,或者没有插入任何记录

更新


或者,正如评论中正确指出的那样,ODBC驱动程序本身要么有缺陷,要么根本不提供此功能,您没有得到预期的记录数。

ODBC不是驱动程序,而是驱动程序的包装器。这个问题的答案取决于您正在使用的底层ODBC驱动程序,它通常在连接字符串中指定

MSDN文档实际上更多的是期望或建议,但ODBC接口不能强制驱动程序返回特定结果。可能是驱动程序的某些优化或设置干扰了您的结果,这与SQL Server NO COUNT设置不同,SQL Server NO COUNT设置会覆盖驱动程序报告受影响行的尝试,等等

有关ODBC工作原理的更详细说明,请参见维基百科:

由于不同的技术具有不同的功能,大多数ODBC驱动程序并不实现ODBC标准中定义的所有功能。一些驱动程序提供了标准中未定义的额外功能

如果您告诉我们您使用的是哪个驱动程序,可能有助于找到解决方案

编辑

据我所知,所讨论的ODBC API函数是SQLRowCount函数,定义如下:

根据ODBC标准,必须实现此功能才能将驱动程序视为ODBC兼容。这并不是说函数将返回预期的或正确的结果,而是说它就在那里

据我所知,SQLRowCount函数已经实现。没有提及该功能以任何方式被禁用或任何必需的配置


鉴于上述情况,我将直接与供应商联系。它们的实现中似乎存在错误或未记录的功能。

我也有类似的问题,这是因为相关数据库的ODBC驱动程序与数据库的版本不同

使用以下命令检查数据库中的版本:

select @@version
在ODBC中,至少在windows xp中:

控制面板->管理工具->Microsoft ODBC源 管理员->驱动程序->此处检查您的 数据库

如果它们不同,那可能就是问题所在

试试看

ExecuteReader
而不是

ExecuteNonQuery 

并在SQL语句中使用select获取值

由于没有可影响的记录,这难道不正常吗?它们只是刚刚创建的…但在sql server中,它给出了插入记录数。请在帖子中添加插入语句。MSDN文档有误导性。作者过于乐观地认为,所有或绝大多数ODBC驱动程序实现都将完全实现所有建议。在实践中,很少有驾驶员实施所有建议。关于Romil的代码几乎肯定是错误的说法太过强烈了——这里没有足够的证据来诊断这个问题。编辑以包括驱动程序被窃听选项没有考虑到这一点,重新措辞可能是驱动程序被窃听。然而,我们不知道他连接的是什么数据源,所以这可能不是一个bug,而是一个特性。也许计数插入的记录会产生很大的开销,并且驱动程序为了响应而禁用了此功能。甚至可以通过配置文件打开和关闭记录计数。在我们知道正在使用哪个驱动程序之前,真的不知道问题出在哪里。我使用的是transoft odbc驱动程序。你能告诉我这种情况下的行为吗?@Romil-不幸的是,我没有和那个供应商打交道的经验。但听起来他们有连接到许多不同数据源的驱动程序。您可能需要查看他们网站上的文档,以了解您正在使用的特定驱动程序。这里可以找到文档:非常感谢您的帮助。我代表你的回答说服了客户+1给你。@RomilKumarJain-已经好几年了,但我很好奇你是否确定这是否是供应商的问题。它被修补了吗?@JDB我已经转移到其他项目,所以我没有关于这个的更新。谢谢您的提问。我正在执行INSERT,因此如何使用ExecuteReader进行插入。请执行INSERT,然后选择进行更改,或者使用存储过程。我的问题是,为什么我不能使用ExecuteOnQuery仅获取INSERT语句的计数。数据为
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();

      }
   }

g用我的代码插入数据库,但唯一的问题是我没有得到计数。我得到了更新记录的计数,但没有得到插入记录的计数。我得到了所有受影响记录的计数!我正在使用transoft驱动程序。您使用的是另一个。