2010-10-06 26 views
0

Il y a un problème avec sqldatareader lorsque la condtion dans la commande SQL est arabe comme ceci:autre problème avec sqldatareader lorsque la condtion dans la commande SQL est arabe

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

Cela ne récupère pas de données bien qu'il y ait un utilisateur nom qui a ce type
alors pouvez-vous m'aider s'il vous plaît? merci^_^

+1

(1.) Vous devriez vraiment utiliser les étiquettes de code (le bouton 101010) pour mettre en évidence votre code; cela le rend beaucoup plus facile à lire. (2.) Vous dites que le nom d'utilisateur est en arabe, mais votre instruction 'WHERE' utilise la colonne' typ'. Êtes-vous sûr d'avoir la bonne colonne dans votre déclaration «WHERE»? – LittleBobbyTables

+0

je suis débutant pour ce site alors pouvez-vous m'aider et me dire comment mettre en évidence mon code s'il vous plaît –

+0

désolé je voulais dire il y a un nom d'utilisateur qui a ce type je vais l'éditer –

Répondre

0

J'ai réécrit votre code pour utiliser un paramètre de requête. Vous voulez éviter de mettre des chaînes directement dans vos requêtes comme ça (le type devrait probablement être normalisé de toute façon). La fonction principale devrait probablement retourner une liste de clients à votre couche de présentation, qui serait alors responsable de l'affichage des clients, mais je ne suis pas allé aussi loin.

Étant donné que votre requête a fonctionné à partir de Management Studio, les paramètres de classement de votre base de données devraient être corrects.

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; 
}