2 reverielin ReverieLin 于 2016.03.18 16:17 提问

int x = cmd.ExecuteNonQuery(); 附近有语法错误
    string connString = "server = .;database = sztsl; integrated security = true";

    private void btnDadd2_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(connString);
        conn.Open();
        string sql = string.Format("insert into Daily(Date,StarTime,Endtime,Person,Failure,Reason,Solution,Message) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}'",txtDdate.Text, txtDstartime.Text, txtDendtime.Text, txtDperson.Text, txtDfailure.Text, txtDreason.Text, txtDstartime.Text, txtDmessage.Text);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = sql;
        cmd.CommandType = CommandType.Text;
        cmd.Connection = conn;
       **int x = cmd.ExecuteNonQuery();** 调试提示这里:附近有语法错误
        conn.Close();
        if (x >= 1)
            MessageBox.Show("Succeed", "Prompt",MessageBoxButtons.OK);
        MessageBox.Show("Failure", "Prompt", MessageBoxButtons.OK);

    }

4个回答

ReverieLin
ReverieLin   2016.03.21 12:44
已采纳

找到原因了,sql語句中少了個:)。真是麻煩大家了。

caozhy
caozhy   Ds   Rxr 2016.03.18 22:08

Date是关键字,需要用方括号转义。

ReverieLin
ReverieLin 謝謝您的回答。這個試了不行,我又重新創建了一個沒有關鍵字的新表和一個新的解決方案,複製代碼稍微修改錯誤依舊。
一年多之前 回复
cxy258119025
cxy258119025   2016.03.18 16:28

把实际的sql放到数据库里面执行一下。看是否会报错。

ReverieLin
ReverieLin 谢谢您的回答。我试了,可以在SQL里面执行,返回一行受影响。
接近 2 年之前 回复
Mikell
Mikell   2016.03.18 16:44

很有可能是时间格式问题。而且这种方式会造成 SQL Injection的问题。最好用 Parameter。

ReverieLin
ReverieLin 谢谢您的回答。为了排除时间格式的影响,我特意把所有数据类型改为varchar了。然后谢谢您的建议。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!