我无法调用我的非查询。当我运行这个时,我得到以下错误 - “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();
我不确定为什么我会继续收到此错误。有人可以帮帮我吗?
感谢。
答案 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();
}
然而:
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();