C# 其他信息: ExecuteNonQuery: CommandText 属性尚未初始化

//SqlConnectionsqlConn;SqlCommandcmdStr;stringsqlStr;intcount;privatevoidbutton2_Clic... //
SqlConnection sqlConn;
SqlCommand cmdStr;
string sqlStr;
int count;
private void button2_Click(object sender, EventArgs e)
{
string strConn = "server=127.0.0.1;database=ufdata_001_2014;uid=sa;pwd=cs,./123";
sqlConn = new SqlConnection(strConn);
sqlConn.Open();
cmdStr = new SqlCommand(sqlStr,sqlConn);
for (int i = 0; i < listView1.Items.Count; i++)
{
sqlStr = "insert into Test (t_id,t_name,t_time,t_price) values (t_id = @t_id,t_name = @t_name,t_time = @t_time,t_price = @t_price)";
cmdStr.Parameters.Add("@t_id", SqlDbType.Int);
cmdStr.Parameters.Add("@t_name", SqlDbType.NVarChar,50);
cmdStr.Parameters.Add("@t_time", SqlDbType.DateTime);
cmdStr.Parameters.Add("@t_price", SqlDbType.Money);
cmdStr.Parameters["@t_id"].Value = listView1.Items[i].SubItems[0].Text;
cmdStr.Parameters["@t_name"].Value = " + listView1.Items[i].SubItems[1].Text + ";
cmdStr.Parameters["@t_time"].Value = listView1.Items[i].SubItems[2].Text;
cmdStr.Parameters["@t_price"].Value = listView1.Items[i].SubItems[3].Text;
}
if ( cmdStr.ExecuteNonQuery()> 0)
{
MessageBox.Show("新增记录成功!");
sqlConn.Close();
}
else
{
MessageBox.Show("新增失败!");
}
}
为什么提示这个,才学,不太懂,谢谢!
展开
 我来答
百度网友8d17b9d
推荐于2016-07-09 · TA获得超过280个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:181万
展开全部

你这段代码由两个问题,

  • sqlStr没有正确传递到cmdStr对象中,这也是你的程序报错的原因。

  • For循环这个逻辑问题很大,具体可以看我给你的代码注释。

SqlConnection sqlConn; 
SqlCommand cmdStr; 
string sqlStr; 
int count;
private void button2_Click(object sender, EventArgs e)
{
    string strConn = "server=127.0.0.1;database=ufdata_001_2014;uid=sa;pwd=cs,./123";
    sqlStr = sqlStr = "insert into Test (t_id,t_name,t_time,t_price) values (t_id = @t_id,t_name = @t_name,t_time = @t_time,t_price = @t_price)"; 
    sqlConn = new SqlConnection(strConn); sqlConn.Open(); 
    cmdStr = new SqlCommand(sqlStr, sqlConn);
 
    // 这个For循环本来是想给Command对象赋值,但是你这样一循环,最后只能是ListView的最后一行插入数据库了
    for (int i = 0; i < listView1.Items.Count; i++) 
    { 
        cmdStr.Parameters.Add("@t_id", SqlDbType.Int); 
        cmdStr.Parameters.Add("@t_name", SqlDbType.NVarChar, 50); 
        cmdStr.Parameters.Add("@t_time", SqlDbType.DateTime); 
        cmdStr.Parameters.Add("@t_price", SqlDbType.Money); 
        cmdStr.Parameters["@t_id"].Value = listView1.Items[i].SubItems[0].Text; 
        cmdStr.Parameters["@t_name"].Value = " + listView1.Items[i].SubItems[1].Text + "; 
        cmdStr.Parameters["@t_time"].Value = listView1.Items[i].SubItems[2].Text; 
        cmdStr.Parameters["@t_price"].Value = listView1.Items[i].SubItems[3].Text;
        // 如果想把所有的行都插入数据库,你得把下面的cmdStr.ExecuteNoQuery()移到这里来。
        // 去掉MessageBox逻辑,不然会每次都提示你。 待跳出For循环后关闭连接sqlConn.Close().
    } 
           
    // 请看上面的解释 
    if (cmdStr.ExecuteNonQuery() > 0)
    { //MessageBox.Show("新增记录成功!"); 
        sqlConn.Close();
    }
    else
    { //MessageBox.Show("新增失败!"); 
    }
}
追问
sqlStr如何正确传入进去呢?
百度网友6fcf96b
2014-06-27 · TA获得超过127个赞
知道小有建树答主
回答量:120
采纳率:100%
帮助的人:84.7万
展开全部
cmdStr.CommandText=sqlStr;这里不指定的话,数据库不知道 你要执行什么sql语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leon382
2014-06-27 · TA获得超过1064个赞
知道小有建树答主
回答量:1744
采纳率:0%
帮助的人:984万
展开全部
没有指定 执行的sql
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式