如何在c#中使用oledb执行pl sql块

时间:2014-08-16 07:58:56

标签: c# sql visual-studio-2010 plsql

我在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是整数。

2 个答案:

答案 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

相关问题