Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.AccessViolationException:在ODBC命令中有@时尝试读取或写入受保护内存_C#_Mysql_Odbc - Fatal编程技术网

C# System.AccessViolationException:在ODBC命令中有@时尝试读取或写入受保护内存

C# System.AccessViolationException:在ODBC命令中有@时尝试读取或写入受保护内存,c#,mysql,odbc,C#,Mysql,Odbc,我遇到了一个有趣的问题,我还没有找到解决办法 我们正在MySQL数据库上运行以下代码。 代码的目标是用行号填充列。 当通过HeidiSQL执行时,SQL代码本身运行良好,但当从C#代码执行时,会导致System.AccessViolationException异常 代码: 我百分之百确定崩溃是因为@pos,它可能被odbc命令标记为一个参数。如果我删除@the System.AccessViolationException,则不会再发生异常,但当然,由行号填充列的期望结果不会发生 我尝试了各种方

我遇到了一个有趣的问题,我还没有找到解决办法

我们正在MySQL数据库上运行以下代码。 代码的目标是用行号填充列。 当通过HeidiSQL执行时,SQL代码本身运行良好,但当从C#代码执行时,会导致System.AccessViolationException异常

代码:

我百分之百确定崩溃是因为@pos,它可能被odbc命令标记为一个参数。如果我删除@the System.AccessViolationException,则不会再发生异常,但当然,由行号填充列的期望结果不会发生

我尝试了各种方法,比如将@pos作为参数提供给OdbcCommand,并在fill\u rowcounter\u查询字符串中添加一个@,以将其指示为文本字符串,但这两个选项都没有给出想要的结果

有什么想法吗

编辑:

显然,问题不在@中,而是因为分号而出现的

如果我将查询更改为

string fill_rowcounter_query = "SELECT 1; UPDATE TableA SET rowcounter = 1;";

我仍然会犯同样的错误。移除选择1;part使查询运行时没有错误,这使我相信问题出在分号上。

我认为问题出在ODBC驱动程序上。您是否在MariaDBConn和HeidiSQL中使用相同的连接字符串?CommandText(fill_rowcounter_query)语法与HeidiSQL完全相同。Hi@jdweng yes这两个连接字符串是相同的。ODBC是一个标准,用于描述数据库驱动程序的输入和输出。Net库是一个将c#指令传递给驱动程序的接口。因此您有三个部分1)连接字符串2)命令文本(字符串查询)3)参数。因此,在一个应用程序中起作用的内容也应该在另一个应用程序中起作用。有一些区别。例如,一个数据库可能在命令文本和变量参数中使用美元符号,另一个数据库可能在参数中使用“@”。因此,在HeidiSQL中起作用的东西也应该在c#中起作用。
string fill_rowcounter_query = "SELECT 1; UPDATE TableA SET rowcounter = 1;";