1

我无法调用我的非查询。当我运行它时,我收到以下错误 - “ExecuteNonQuery:CommandText 属性尚未初始化”

        //delete from the database
        OdbcCommand cmdCommand = new OdbcCommand(tSQL, Global.gADOConnection);
        tSQL = "Delete from SEARCH_CRITERIA where CRITERIA_ID = " + iCriteriaID;
        Global.gADOConnection.Open();
        cmdCommand.ExecuteNonQuery();
        Global.gADOConnection.Close();

我不确定为什么我会继续收到此错误。任何人都可以帮助我吗?

谢谢。

4

3 回答 3

3

在将其传递给构造函数tSQL 之后,您正在设置值。OdbcCommand我怀疑这不是你想要的。尝试:

string tSQL = "Delete from SEARCH_CRITERIA where CRITERIA_ID = " + iCriteriaID;
using (OdbcCommand cmdCommand = new OdbcCommand(tSQL, Global.gADOConnection))
{
    Global.gADOConnection.Open();
    cmdCommand.ExecuteNonQuery();
    Global.gADOConnection.Close();
}

然而:

  • 我强烈建议您使用参数化 SQL,而不是将值嵌入 SQL 本身
  • 请注意我是如何在using最后使用语句来处理命令的
  • 我还强烈建议您不要将全局变量用于数据库连接。每次需要数据库操作时创建一个新连接,并在最后处理它:

     using (OdbcConnection connection = new OdbcConnection(...))
     {
         connection.Open();
         using (OdbcCommand command = ...)
         {
             command.ExecuteNonQuery();
         }
     }
    

    让连接池处理在底层网络连接方面提高效率。

于 2012-07-23T19:27:28.513 回答
1

tSQL 需要放在 cmdCommand 前面:

tSQL = "Delete from SEARCH_CRITERIA where CRITERIA_ID = " + iCriteriaID;
OdbcCommand cmdCommand = new OdbcCommand(tSQL, Global.gADOConnection);

你真的应该使用参数来避免sql注入。

tSQL = "Delete from SEARCH_CRITERIA where CRITERIA_ID = @CriteriaID";
OdbcCommand cmdCommand = new OdbcCommand(tSQL, Global.gADOConnection);
cmdCommand.Parameters.AddWithValue("@CriteriaID", iCriteriaID);

接下来要考虑的是using自动关闭资源的括号。

于 2012-07-23T19:27:46.523 回答
0

您正在使用null命令文本初始化命令。在创建命令之前尝试分配 tSQL。

var tSQL = "Delete from SEARCH_CRITERIA where CRITERIA_ID = " + iCriteriaID;
OdbcCommand cmdCommand = new OdbcCommand(tSQL, Global.gADOConnection);
Global.gADOConnection.Open();
cmdCommand.ExecuteNonQuery();
Global.gADOConnection.Close();
于 2012-07-23T19:27:53.797 回答