2009-08-18 4 views
0

j'ai le code suivantcomment déterminer si des enregistrements nuls retour SqlDataAdapter

string connString = ConfigurationManager.ConnectionStrings["XXXConnectionString"].ConnectionString; 
     SqlConnection conn = new SqlConnection(connString); 
     conn.Open(); 

     SqlDataAdapter SQLDataAdapter1 = new SqlDataAdapter("SELECT * FROM EVENTSignUp WHERE (MembmerEmail = " + userInfo.Email + ")", conn); 
     DataTable dtResult1 = new DataTable(); 
     SQLDataAdapter1.Fill(dtResult1); 

mais s'il n'y a pas de dossiers retournés, je reçois simplement une exception à:

 SQLDataAdapter1.Fill(dtResult1); 

Comment puis-je déterminer s'il n'y a aucun enregistrement retourné à partir de cette requête?

+0

quelle est l'exception? – Jason

+0

également, il semble que si vous utilisez cette chaîne SQL, votre courriel a probablement besoin de guillemets autour de lui .... – Jason

+1

Votre chaîne SQL est ouverte à une attaque d'injection SQL. Utilisez des requêtes paramétrées! –

Répondre

2

Je pense que le problème pas dans les archives returend par SqlDataAdapter parce que même si elle est vide, il ne générera pas d'exception. le problème dans votre requête parce que le champ email est varchar et il devrait ressembler à ceci:

SqlDataAdapter SQLDataAdapter1 = new SqlDataAdapter("SELECT * FROM EVENTSignUp WHERE (MembmerEmail = '" + userInfo.Email + "')", conn); 
+0

d'accord avec vous. de toute façon .... les paramètres devraient être passés avec la collection de paramètres sur la commande pour faire précéder l'injection sql et obtenir de meilleures performances. – gsharp

+0

oui vous avez raison sur les paramètres, il devrait être fait par des paramètres pour éviter l'injection, et je l'ai écrit très rapidement juste pour lui faire savoir où est le problème. –

+0

typo dans la requête était mon problème – leora

2
dtResult1.Rows.Count > 0 

- modifier

N'a pas suivre lu le message; remarquez que vous obtenez une exception sur .Fill. Évidemment, mon extrait de code ne vous aidera pas. Comme d'autres l'ont demandé; Quelle est l'exception?

- modifier:

Et, comme d'autres l'ont noté, votre requête doit être de la forme:

SqlCommand command = new SqlCommand(@" 
select 
    * 
from 
    EVENTSignUp 
where 
    MemberEmail = @MemberEmail 
"); 

SqlParameter param = new SqlParameter("@MemberEmail", SqlDbType.NVarChar); 
param.Value = userInfo.Email; 

command.Parameters.Add(param); 

SqlDataAdapter dtResult1 = new SqlDataAdapter(command); 
DataTable dtResult1 = new DataTable(); 
SQLDataAdapter1.Fill(dtResult1); 
+0

+1 pour donner une réponse qui réduit la possibilité d'une attaque par injection SQL. –

0

Vous pouvez également vérifier à l'aide SqlDataReader. Voici un exemple simple pour vérifier si SqlDataReader a le résultat ou non par ceci:

String con_string = "Your Connection String Here"; 
String strSQL = "Your Query Here"; 
using (SqlDataReader objNameDR = SQLHelper.ExecuteReader(con_string, CommandType.Text, strSQL, null)) { 

    if (objNameDR.HasRows) { 
     // Having Rows 
    } 
    else{ 
     // Having No Row (Zero Record) 
    } 

} 
Questions connexes