在 System.Data.dll 中发生了类型为 'System.Data.SqlClient.SqlException' 的异常。

我是 C# 的初学者,当我执行代码时,出现了以下错误信息>>

"在 System.Data.dll中出现异常,但用户代码没有处理该异常 > 其他信息:在 '=' 附近的语法不正确;

这就是代码

string position;

SqlConnection con = new SqlConnection("server=free-pc\\FATMAH; Integrated Security=True; database=Workflow; ");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=" + id.Text, con);

SqlDataReader Read = cmd.ExecuteReader();

if (Read.Read()==true)
{
    position = Read[0].ToString();
    Response.Write("User Registration successful");
}
else
{
    Console.WriteLine("No Employee found.");
}

Read.Close(); 
解决办法

您的代码存在一些问题。首先,我建议使用参数化查询,这样可以避免 SQL 注入攻击,而且框架也能发现参数类型:

var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);

其次,由于你只对查询返回的一个值感兴趣,最好使用 ExecuteScalar MSDN

var name = cmd.ExecuteScalar();

if (name != null)
{
   position = name.ToString();
   Response.Write("User Registration successful");
}
else
{
    Console.WriteLine("No Employee found.");
}

最后一件事是将 SqlConnectionSqlCommand 包入 using 中,这样这些资源使用的任何资源都会被弃置:

string position;

using (SqlConnection con = new SqlConnection("server=free-pc\\FATMAH; Integrated Security=True; database=Workflow; "))
{
  con.Open();

  using (var cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con))
  {
    cmd.Parameters.AddWithValue("@id", id.Text);

    var name = cmd.ExecuteScalar();

    if (name != null)
    {
       position = name.ToString();
       Response.Write("User Registration successful");
    }
    else
    {
        Console.WriteLine("No Employee found.");
    }
  }
}
评论(1)

我认为您的 EmpID 列是 string,而您忘记在值中使用 ' '

因为当你写下 EmpID=" + id.Text 时,你的命令看起来像 EmpID = 12345 而不是 EmpID = '12345'

将您的 SqlCommand 更改为

SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID='" + id.Text +"'", con);

或者,作为一种更好的方法,您可以(也应该)始终使用参数化查询。这种字符串串联方式容易受到 SQL注入 攻击。

SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID = @id", con);
cmd.Parameters.AddWithValue("@id", id.Text);

我认为您的 EmpID 列保存的是员工 id',所以它的类型应该是数字类型,而不是字符类型。

评论(0)

试试这个

SqlCommand cmd = new SqlCommand("SELECT EmpName FROM Employee WHERE EmpID=@id", con);
cmd.Parameters.AddWithValue("id", id.Text);
评论(0)