与asp.net中的DataSet相关的Sql异常

时间:2015-03-03 10:08:41

标签: c# sql sql-server exception dataset

我想在“服务费用”表中获取id指定行的值。当我尝试执行以下代码时出现异常,其中显示“类型'System.Data.SqlClient.SqlException'的异常在System.Data.dll中发生但未在用户代码中处理。附加信息:' A34 ”“。

是关于数据集对象吗?

PS:id是; ee83089d-4的 A34 -46e0-be6c-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();

            }

4 个答案:

答案 0 :(得分:2)

将您的ID用单引号括起来,它应该如下所示:

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

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

答案 1 :(得分:1)

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

避免sql注入。

答案 2 :(得分:1)

小心 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);

答案 3 :(得分:0)

您将不带引号的ID传递给SQL。

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

你可能想要:

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

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