C# 在执行Oracle全部插入时,如何在Dapper中执行同步
我将以下SQL命令(简化)分配给varC# 在执行Oracle全部插入时,如何在Dapper中执行同步,c#,oracle,dapper,C#,Oracle,Dapper,我将以下SQL命令(简化)分配给varSQL: 全部插入 转换为ORACLETBL(COL_A,COL_B)值('A','B')) 转换为ORACLETBL(COL_A,COL_B)值('C','D')) 从双重选择中选择*; 当我执行conn.Execute(sql)时在void方法中,命令工作正常 当我执行时,等待conn.ExecuteAsync(sql)在异步任务方法中,针对完全相同的SQL命令,我得到异常“ORA-00933:SQL命令未正确结束” 有人知道我做错了什么吗?我不知道为
SQL
:
全部插入
转换为ORACLETBL(COL_A,COL_B)值('A','B'))
转换为ORACLETBL(COL_A,COL_B)值('C','D'))
从双重选择中选择*;
当我执行conn.Execute(sql)时
在void
方法中,命令工作正常
当我执行时,等待conn.ExecuteAsync(sql)
在异步任务
方法中,针对完全相同的SQL命令,我得到异常“ORA-00933:SQL命令未正确结束”
有人知道我做错了什么吗?我不知道为什么它会在一种情况下抛出异常,而在另一种情况下却不会,但这可能与您打算使用
querysync
时使用executesync
有关
Execute不用于selects,而是在执行操作时返回受影响的行数
在中,您会注意到它们使用ExecuteAsync,并且只接收受影响的行数,但在想要检索实际行时,它们使用Query
包含对
Execute
和Query
之间区别的更详细解释。我不确定为什么它在一种情况下引发异常,但在另一种情况下却不会引发异常,但这可能与您打算使用querysync
时使用executesync
有关
Execute不用于selects,而是在执行操作时返回受影响的行数
在中,您会注意到它们使用ExecuteAsync,并且只接收受影响的行数,但在想要检索实际行时,它们使用Query
包含有关
Execute
和Query
之间差异的更详细说明。请删除语句末尾的分号
编辑:
也许这也是一个解决办法
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
using (var connection = new SqlConnection("")) {
connection.Open();
var affectedRows = await connection.ExecuteAsync(sql,
new[] {
new {CustomerName = "John"},
new {CustomerName = "Andy"},
new {CustomerName = "Allan"}
}
);
}
或尝试
SELECT 1 FROM DUAL
而不是
SELECT * FROM DUAL
删除语句末尾的分号 编辑: 也许这也是一个解决办法
string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
using (var connection = new SqlConnection("")) {
connection.Open();
var affectedRows = await connection.ExecuteAsync(sql,
new[] {
new {CustomerName = "John"},
new {CustomerName = "Andy"},
new {CustomerName = "Allan"}
}
);
}
或尝试
SELECT 1 FROM DUAL
而不是
SELECT * FROM DUAL
这是一个INSERT语句,而不是SELECT语句(尽管“INSERT many”的Oracle语法包含一个SELECT子查询)。无论如何,使用QueryAsync也会引发相同的异常。这是一个INSERT语句,而不是SELECT语句(尽管“INSERT many”的Oracle语法包含一个SELECT子查询)。无论如何,使用QueryAsync会引发相同的异常。如果没有分号,即使是以同步方式也无法工作。但它的行为异常(似乎在没有执行操作或引发异常的情况下结束)。可能在VS2019中存在调试问题。这个问题被证明是在表上有锁的情况下执行SQL命令的愚蠢尝试,这导致了各种不必要的兔子跟踪。一旦基本问题得到解决(“重新启动计算机!”),命令正常工作,分号被删除;无需进一步更改。如果没有分号,即使以同步方式,也无法工作。但它的行为异常(似乎在没有执行操作或引发异常的情况下结束)。可能在VS2019中存在调试问题。这个问题被证明是在表上有锁的情况下执行SQL命令的愚蠢尝试,这导致了各种不必要的兔子跟踪。一旦基本问题得到解决(“重新启动计算机!”),命令正常工作,分号被删除;无需进一步修改。