【问题标题】:Additional information: Incorrect syntax near 'Graneya'. Unclosed quotation mark after the character string ')'附加信息:“Granaya”附近的语法不正确。字符串 ')' 后面的非闭合引号
【发布时间】:2015-07-13 21:33:47
【问题描述】:

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

附加信息:“Granaya”附近的语法不正确。

字符串')'后面的非右引号。

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

这是我的代码:

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");
}

请指教

【问题讨论】:

  • cmbxNumuneCinsi.TextcmbxGonderen.Text 的值是多少?顺便说一句,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
  • 请显示格式化的sql查询

标签: c# sql syntax combobox


【解决方案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,而不是字符串连接。

【讨论】:

    【解决方案2】:

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

    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"));
    

    【讨论】:

      【解决方案3】:

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

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

      应该是

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

      但更重要的是;

      您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。也可以使用using statement 来处理您的SqlConnectionSqlCommand auto,而不是手动调用.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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-20
        • 2011-02-10
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多