我将以下SQL命令(简体)分配给var sql
:
INSERT ALL
INTO ORACLETBL (COL_A,COL_B) VALUES ('A','B')
INTO ORACLETBL (COL_A,COL_B) VALUES ('C','D')
SELECT * FROM dual;
当我在conn.Execute(sql);
方法中执行void
时,该命令可以正常工作。
当我对完全相同的SQL命令在await conn.ExecuteAsync(sql);
方法中执行async Task
时,出现异常“ ORA-00933:SQL命令未正确结束”。
每个人都明显知道我在做什么错吗?
答案 0 :(得分:0)
我不确定为什么在一种情况下会引发异常,而在另一种情况下不会引发异常,但是当您打算使用ExecuteAsync
时,它可能与您使用QueryAsync
有关。
Execute不适用于selects,而是在执行操作时返回受影响的行数。
在ExecuteAsync documentation中,您会注意到他们使用ExecuteAsync并仅收到受影响的行数,但是当他们想检索实际行时使用Query。
This stack post包含对Execute
和Query
之间区别的更详细说明。
答案 1 :(得分:0)
在语句末尾删除分号。
编辑:
也许这也是解决方案。
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