我想在“服务费用”表中获取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();
}
答案 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调用。