当我点击此按钮时,我面临此错误:
executiontenonquery commandtext属性尚未初始化
private void button_FirstStep_Click(object sender, EventArgs e)
{
SqlConnection Conn = new SqlConnection(Yahya.strcon);
Conn.Open();
int CurrentCount = Convert.ToInt32(label_CurrentCount.Text);
string strcom1 = "select * from vm1 where count = '" + (CurrentCount - 1) + "' and benchmarkid = '" + Structure.BenchmarkID + "' ";
SqlCommand cmd = new SqlCommand(strcom1, Conn);
SqlDataReader reader = cmd.ExecuteReader();
string strcom = "";
while (reader.Read())
{
if (reader["vmid"].ToString() != "")
{
string vmid = reader["vmid"].ToString();
strcom += "update vm1 set pmid = (select pmid from vm1 as VM2 where benchmarkid = '" + Structure.BenchmarkID + "' and vm2.count ='" + (CurrentCount - 1) + "' and vm2.vmid ='" + vmid + "' ) where count = '" + CurrentCount + "' and vmid = '" + vmid + "' and benchmarkid = '" + Structure.BenchmarkID + "' \n";
}
}//end of while
reader.Close();
cmd.CommandText = strcom;
cmd.ExecuteNonQuery();
}
答案 0 :(得分:1)
Rene关于他的comment非常正确,看起来像reader.Read()
返回false
这就是为什么你的代码永远不会进入你的while
循环并且CommandText
已分配给""
,这就是ExecuteNonQuery
抛出
ExecuteNonQuery:CommandText属性尚未初始化
您可以检查您的strcom是否为空字符串以解决您的问题但我在您的代码中看到更多错误的内容除此之外..
count
列似乎是数字值,但您提供的CurrentCount - 1
字符是带引号的字符。如果它不是数字,则应。阅读:Bad habits to kick : choosing the wrong data type benchmarkid
也应该(?)为数字类型。using
statement自动处理您的连接,命令和阅读器 ,而不是手动调用Close
或Dispose
方法。Open
您的连接只是。答案 1 :(得分:0)
你可以在询问之前通过简单的调试来解决这个问题。
此错误的原因可能是您的第一个请求返回零结果
因此,reader.Read()
始终为false
,strcom
保持为空。在调用cmd.CommandText
之前,您将空字符串设置为ExecuteNonQuery()
。
要解决这个问题,只需检查字符串是否为空,只有在它不为空时执行最后一个查询:
...
reader.Close();
if (!string.IsNullOrEmpty(strcom))
{
cmd.CommandText = strcom;
cmd.ExecuteNonQuery();
}