我使用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.");
}
}
答案 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中,条件应该使用and
,or
和其他逻辑运算符连接,而不是逗号。
所以它应该是(可能不是and
但应该使用or
运算符 - 从上下文中不清楚。)
Where Ad='something' and Soyad = 'something'...,
另请注意,连接查询文本可以防止sql注入。请考虑使用parameterized查询。