如何在查询中传递字符串

时间:2010-12-01 09:37:14

标签: c#

我必须在查询中传递一个字符串值...这是我的代码

 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 ..但我不知道如何在该查询中传递该字符串。任何建议?

3 个答案:

答案 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);