与asp.net中的数据集相关的Sql异常

本文关键字:Sql 异常 数据集 net asp | 更新日期: 2024-09-22 17:26:00

我想在"服务费"表中获取id指定行的值。当我尝试执行以下代码时,出现了一个异常,上面写着"System.Data.dll中发生了类型为"System.Data.SqlClient.SqlException"的异常,但未在用户代码中处理。其他信息:"a34"附近的语法不正确。"

是关于数据集对象吗?

PS:id为;ee83089d-4a34-46e0-b6c-b8b506f31a8e

 if (Request.QueryString["MyId"] != null)
            {
                isUpdate = true;
                var id = Request.QueryString["MyId"].ToString();
                SqlCommand cmd2 = new SqlCommand("SELECT * FROM ServiceFees WHERE Id=" + id, connection);
                SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);
                DataSet ds = new DataSet();
                adapter2.Fill(ds);
                sf1.name = ds.Tables[0].Rows[0][1].ToString();
            }

与asp.net中的数据集相关的Sql异常

将您的id用单引号括起来,它应该看起来像:

 SqlCommand cmd2 = new SqlCommand("SELECT * FROM ServiceFees WHERE Id='" + id +"'", connection);

Id是GUID,应该用单引号括起来。

SqlCommand cmd2 = new SqlCommand("SELECT * FROM ServiceFees WHERE Id= @id", connection);
cmd2.Parameters.Add(new SqlParameter("id",id));

以避免sql注入。

小心SQL注入

不要用单引号、双引号传递参数

始终使用SqlParameter

由于您的参数是字符串,您需要将其作为string DataType 传递

string Id="ee83089d-4a34-46e0-be6c-b8b506f31a8e";
    SqlParameter para1=new SqlParameter("@Id",SqlDbType.Varchar,500);
    para1.Value=Id;
    SqlCommand cmd2 = new SqlCommand("SELECT * FROM ServiceFees WHERE Id=@Id" , connection);
cmd2.Parameters.Add(para1);
SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);

您正在将未引用的id传递给SQL。

因此,它可能试图计算ee83089d-4a34-46e0-b6c-b8b506f31a8e的结果。

你可能想要:

SqlCommand cmd2 = new SqlCommand("SELECT * FROM ServiceFees WHERE Id='" + 
  id + "'", connection);

或者其他不易受到注入攻击的SQL调用。