C#错误帮助 - “ExecuteNonQuery:CommandText属性尚未初始化”

时间:2012-07-23 19:25:46

标签: c# visual-studio-2010

我无法调用我的非查询。当我运行这个时,我得到以下错误 - “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();

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

感谢。

3 个答案:

答案 0 :(得分: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();
         }
     }
    

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

答案 1 :(得分: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括号以自动关闭资源。

答案 2 :(得分:0)

您正在使用null命令文本初始化Command。尝试在创建命令之前分配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();