我必须在查询中传递一个字符串值...这是我的代码
string a = ConfigurationManager.AppSettings["var"];
SqlDataAdapter da = new SqlDataAdapter("select codesnippet from edk_custombrsnippet_vw where partnerid = 'a'", con);
DataTable dt = new DataTable();
da.Fill(dt);
我在字符串中得到了值a ..但我不知道如何在该查询中传递该字符串。任何建议?
答案 0 :(得分:8)
使用参数化查询,例如:
string a = ConfigurationManager.AppSettings["var"];
SqlDataAdapter da = new SqlDataAdapter(
"select codesnippet from edk_custombrsnippet_vw where partnerid = @PartnerID",
con);
da.SelectCommand.Parameters.AddWithValue("@PartnerId", a);
DataTable dt = new DataTable();
da.Fill(dt);
你应该不将字符串值嵌入到SQL本身中 - 这会让你开始接受SQL注入攻击。不可否认,在这种情况下,它不是用户提供的值,但最好不要直接包含它。
编辑:我从this MSDN page改编了这个示例,但据我所知,SqlDataAdapter
实际上并没有拥有<{em} Parameters
属性。因此,我已将其改编为使用我希望期待的SqlDataAdapter.SelectCommand.Parameters
...但您可能需要稍微调整一下。
答案 1 :(得分:3)
不是我以任何方式推荐这种方法,你至少应该使用parameterised queries但是要回答你的问题:
string a = ConfigurationManager.AppSettings["var"];
SqlDataAdapter da = new SqlDataAdapter(String.Format("select codesnippet from edk_custombrsnippet_vw where partnerid = '{0}'",a), con);
DataTable dt = new DataTable();
da.Fill(dt);
答案 2 :(得分:2)
我建议使用参数:
// 1. declare command object with parameter
SqlCommand cmd = new SqlCommand(
"select codesnippet from edk_custombrsnippet_vw where partnerid = @PartnerId", conn);
string a = ConfigurationManager.AppSettings["var"];
// 2. define parameters used in command object
SqlParameter param = new SqlParameter();
param.ParameterName = "@PartnerId";
param.Value = a;
// 3. add new parameter to command object
cmd.Parameters.Add(param);