2010-10-06 52 views
0

没有与SqlDataReader的一个问题,当在SQL命令的condtion是阿拉伯语这样的:问题SqlDataReader的当SQL命令的condtion是阿拉伯语

select user_name from users where typ=N 'arabic text' 

这不获取任何数据虽然有用户这种类型的名称
所以你能帮助我吗? 谢谢^ _^

+1

(1.)您确实应该使用代码标签(101010按钮)来突出显示您的代码;它使阅读起来更容易。 (2.)你说用户名是阿拉伯语,但你的'WHERE'语句使用'typ'列。你确定你在'WHERE'语句中有正确的列吗? – LittleBobbyTables 2010-10-06 00:04:12

+0

我是这个网站的初学者,所以你可以帮助我,告诉我如何突出我的代码请 – 2010-10-06 00:12:36

+0

对不起,我的意思是有用户名有这种类型,我将编辑它 – 2010-10-06 00:14:13

回答

0

我已将您的代码重写为使用查询参数。您希望避免将字符串直接放入您的查询中(无论如何,该类型最有可能被标准化)。主函数可能应该返回一个客户端列表到您的表示层,然后这个客户端将负责显示客户端,但是我没有去那么远。

由于您的查询是在Management Studio中运行的,因此您的数据库归类设置应该没问题。

public void ListClientsByType(string clientType) 
{ 
    using (IDbConnection conn = new SqlConnection("connectionstring")) 
    { 
     IDbCommand cmd = conn.CreateCommand(); 
     cmd.CommandText = "SELECT nam FROM clients WHERE typ = @type"; 

     cmd.Parameters.Add(
      _CreateInputParameter(cmd, DbType.String, "@type", clientType)); 

     conn.Open(); 

     IDataReader dr = null; 

     try 
     { 
      dr = cmd.ExecuteReader(); 

      // Work with results here 
     } 
     finally 
     { 
      if (dr != null) 
       dr.Close(); 
     } 
    } 
} 

private IDbDataParameter _CreateInputParameter(
    IDbCommand cmd, DbType type, string name, object value) 
{ 
    IDbDataParameter p = cmd.CreateParameter(); 

    p.DbType = DbType.String; 
    p.Direction = ParameterDirection.Input; 
    p.ParameterName = name; 
    p.Value = value; 

    return p; 
}