我在C#中使用OLEDB执行Pl / Sql块。 代码是:
string a1;
a1 = discom1.Text.ToString();
my_querry10 = "BEGIN"+
"SELECT * from MasterCompliant WHERE Discom ='" + a1 + "';"+
"" + var1 + " = SQL%ROWCOUNT;"+
"END;";
OleDbCommand cmd12 = new OleDbCommand(my_querry10, conn);
conn.Open();
cmd12.ExecuteNonQuery();
异常即将发表声明:
" cmd12.ExecuteNonQuery"如 "无效的SQL语句;预期' DELETE'                             ;
MasterCompliant是表名; Discom是列名,var1是整数。
答案 0 :(得分:1)
删除a1
附近的分号
Discom ='" + a1 + "';"+
至Discom ='" + a1 + "'"+
"BEGIN"+
"SELECT * from MasterCompliant WHERE Discom ='" + a1 + "'"+
"" + var1 + " = SQL%ROWCOUNT;"+
"END;"
答案 1 :(得分:1)
在我看来,您根本不需要单独的块 - 您可以使用SELECT COUNT(1)
和ExecuteScalar
:
string sql = "SELECT COUNT(1) FROM MasterCompliant WHERE Discom = ?";
int count;
// Open and close a connection each time you need one - let the connection pool
// handle making that efficient.
using (var connection = new OleDbConnection(...))
{
connection.Open();
using (var command = new OleDbCommand(sql, conn))
{
command.Parameters.Add("@v", OleDbType.VarChar).Value = discom1.Text;
count = (int) command.ExecuteScalar();
}
}
您可能需要投放到long
而不是int
- 您应该基本尝试并查看。
请注意,使用参数化查询使SQL更易于阅读和会阻止SQL Injection attacks。