C##1;'附近的语法不正确

时间:2018-06-14 06:31:57

标签: c#

当我将测试1键入sNtxtbox时,我看到了以下错误。任何帮助将不胜感激

' 1'

附近的语法不正确
private void flexOpen_Click(object sender, RoutedEventArgs e)
    {
        using (SqlConnection sqlConSN = new SqlConnection(SNconnectionstring))
        {
            sqlConSN.Open();
            String sqlSelectQuerySN = ("Select * FROM tblSN WHERE SerialNumber = " + sNtxtbox.Text);
            SqlCommand sqlCmdSNLoad = new SqlCommand(sqlSelectQuerySN, sqlConSN);
            SqlDataReader drSNReader = sqlCmdSNLoad.ExecuteReader();
            if (drSNReader.Read())
            {
                SNtest1.Text = (drSNReader["Test1"].ToString());
                SNtest2.Text = (drSNReader["Test2"].ToString());
                SNtest3.Text = (drSNReader["Test3"].ToString());    
                SNtest4.Text = (drSNReader["Test4"].ToString());
                SNtest5.Text = (drSNReader["Test5"].ToString());
                SNtest6.Text = (drSNReader["Test6"].ToString());
                SNtest7.Text = (drSNReader["Test7"].ToString());
                SNtest8.Text = (drSNReader["Test8"].ToString());

3 个答案:

答案 0 :(得分:2)

假设您的数据库字段是一个字符串,您应该像这样重写代码:

String sqlSelectQuerySN = ("Select * FROM tblSN WHERE SerialNumber = @serialNumber");
SqlCommand sqlCmdSNLoad = new SqlCommand(sqlSelectQuerySN, sqlConSN);
sqlCmdSNLoad.Parameters.Add("@serialNumber", System.Data.SqlDbType.VarChar, 255).Value = sNtxtbox.Text;

请注意,您应该使用数据库字段类型替换VarChar。我假设您使用的是VarChar。例如,如果您使用NVarChar,则应更改它以反映您的数据库架构。另外,将255替换为VarChar的长度。

你没有需要来传递长度,但是不传递长度意味着.NET会假设数据库字段的长度与你传递的长度相同。因此,SQL服务器将看到序列号长度为5的查询,与序列号长度为6的查询不同,因为它们将分别作为VarChar(5)VarChar(6)传递。每个都有自己的执行计划,这意味着它无法利用缓存来加速查询。有关详细信息,请参阅herehere

这将解决您的问题,并且还可以通过使用参数化查询来保护您免受SQL注入。

答案 1 :(得分:1)

替换此

String sqlSelectQuerySN = ("Select * FROM tblSN WHERE SerialNumber = " + sNtxtbox.Text);

对此:

SqlCommand sqlcmd = ("Select * FROM tblSN WHERE SerialNumber=@SerialNumber",sqlConSN);
sqlcmd.Parameters.AddWithValue("@SerialNumber",sNtxtbox.Text);

答案 2 :(得分:-1)

String sqlSelectQuerySN = "Select * FROM tblSN WHERE SerialNumber = '" + sNtxtbox.Text + "'";

但我建议您使用上面列出的参数..