附加信息:'Graneya'附近的语法不正确。字符串')'后面的未闭合引号

时间:2015-05-04 13:15:42

标签: c# sql syntax combobox

  

类型'System.Data.SqlClient.SqlException'的未处理异常   发生在System.Data.dll

中      

其他信息:'Graneya'附近的语法不正确。

字符串')'后面的未闭合引号。

当我执行我的程序时,它给了我这样的错误;

这是我的代码:

private void btnKaydet_Click(object sender, EventArgs e) {
    StringBuilder name = new StringBuilder();
    foreach (Control cont in this.grpbxIstenenAnalizler.Controls) {
        if (cont is CheckBox && ((CheckBox)cont).Checked == true) {
            name.Append(((CheckBox)cont).Text.ToString() + " ");
        }
    }
    sqlcon.Open();
    SqlCommand sqlcmd = new SqlCommand("INSERT INTO TBL_NUMUNEKAYITDEFTERI(NUMUNEADI, NUMUNEGONDEREN) VALUES('" + cmbxNumuneCinsi.Text + "'" + cmbxGonderen.Text + "')", sqlcon);
    sqlcmd.ExecuteNonQuery();
    sqlcon.Close();
    MessageBox.Show("Kayıt OK");
}

请告知

3 个答案:

答案 0 :(得分:1)

更改

SqlCommand sqlcmd = new SqlCommand("INSERT INTO TBL_NUMUNEKAYITDEFTERI(NUMUNEADI, NUMUNEGONDEREN) VALUES('" + cmbxNumuneCinsi.Text + "'" + cmbxGonderen.Text + "')", sqlcon);

SqlCommand sqlcmd = new SqlCommand("INSERT INTO TBL_NUMUNEKAYITDEFTERI(NUMUNEADI, NUMUNEGONDEREN) VALUES('" + cmbxNumuneCinsi.Text + "','" + cmbxGonderen.Text + "')", sqlcon);

请注意

VALUES('" + cmbxNumuneCinsi.Text + "','" + cmbxGonderen.Text + "')"

另外,为避免SQL Injection,您应该使用parameterized queries,而不是字符串连接。

答案 1 :(得分:0)

我认为你错过了一个逗号,这就是为什么你的值部分只有一个字符,因为你连接它们。

('" + cmbxNumuneCinsi.Text + "'" + cmbxGonderen.Text + "')"

应该是

('" + cmbxNumuneCinsi.Text + "', '" + cmbxGonderen.Text + "')"

但更重要的是;

您应始终使用parameterized queries。这种字符串连接对SQL Injection攻击是开放的。同时使用using statement来处理您的SqlConnectionSqlCommand自动,而不是手动调用.Close().Dispose()方法。

我认为您的列是nvarchar,您可以使用;

using(var sqlcon = new SqlConnection(conString))
using(var sqlcmd = sqlcon.CreateCommand())
{
   sqlcmd.CommandText = "INSERT INTO TBL_NUMUNEKAYITDEFTERI(NUMUNEADI, NUMUNEGONDEREN) VALUES(@ad, @gonderen)";
   sqlcmd.Parameters.Add("@ad", SqlDbType.NVarChar).Value = cmbxNumuneCinsi.Text;
   sqlcmd.Parameters.Add("@gonderen", SqlDbType.NVarChar).Value = cmbxGonderen.Text;

   sqlcon.Open();
   sqlcmd.ExecuteNonQuery();
}

答案 2 :(得分:0)

您应该使用参数来减少错误。

SqlCommand cmd = new SqlCommand(
            "INSERT INTO TBL_NUMUNEKAYITDEFTERI(NUMUNEADI, NUMUNEGONDEREN) VALUES(@numuneCinsi, @numunegonderen)", sqlcon);

cmd.Parameters.Add(new SqlParameter("@numuneCinsi", "firstValue"));
cmd.Parameters.Add(new SqlParameter("@numunegonderen", "secondValue"));