SQL Server 2014:Where附近的语法不正确

时间:2015-07-10 07:36:40

标签: c# sql sql-server-2014

我使用Visual Studio 2013和SQL Server 2014.我收到错误

  

'其中Ad ='

附近的语法不正确

我是初学者,所以我无法找出问题,需要你的帮助。

这是我的代码:

private void btngno_Click(object sender, EventArgs e)
{
    SqlConnection baglan = new SqlConnection("Server=.;Database=lalala;Trusted_Connection=true;");
    baglan.Open();

    SqlCommand cmd2 = new SqlCommand("UPDATE ilktablom SET gno= " + Int32.Parse(gnotxt.Text) + "'Where Ad= '" + txtAd.Text + "' ,Soyad= '" + txtSoyad.Text + "' ,Sifre= '" + txtSifre.Text, baglan);
    if (cmd2.ExecuteNonQuery() == 1)
    {
        MessageBox.Show("Process completed.");
    }
    else
    {
        MessageBox.Show("Process not completed.");
    }
}     

2 个答案:

答案 0 :(得分:4)

您正在生成的SQL(除了对SQL注入开放之外)缺少终止',并在WHERE子句中使用逗号(而不是AND)< / p>

相反,你可以这样做:

private void btngno_Click(object sender, EventArgs e)
{
    using (SqlConnection baglan = new SqlConnection("Server=.;Database=lalala;Trusted_Connection=true;"))
    {
        baglan.Open();

        using (SqlCommand cmd2 = new SqlCommand("UPDATE ilktablom SET gno = @gno Where Ad = @Ad AND Soyad= @Soyad AND Sifre = @Sifre", baglan))
        {
            cmd2.Parameters.Add("@gno", SqlDbType.Int).Value = gnotxt.Text;
            cmd2.Parameters.Add("@Ad", SqlDbType.Varchar).Value = txtAd.Text;
            cmd2.Parameters.Add("@Soyad", SqlDbType.Varchar).Value = txtSoyad.Text;
            cmd2.Parameters.Add("@Sifre", SqlDbType.Varchar).Value = txtSifre.Text;
            if (cmd2.ExecuteNonQuery() == 1)
            {
                MessageBox.Show("Process completed.");
            }
            else
            {
                MessageBox.Show("Process not completed.");
            }
        }
    }
}  

答案 1 :(得分:1)

错误文字不言自明。

这里的语法确实不正确:

Where Ad= '" + txtAd.Text + "' ,Soyad= '.....

此连接产生类似

的查询
Where Ad='something', Soyad = 'something'..., 

但是在Sql Server中,条件应该使用andor和其他逻辑运算符连接,而不是逗号。

所以它应该是(可能不是and但应该使用or运算符 - 从上下文中不清楚。)

Where Ad='something' and Soyad = 'something'..., 

另请注意,连接查询文本可以防止sql注入。请考虑使用parameterized查询。