2010-08-25 5 views
0

Je ne peux pas lire les données de la base de données, pourriez-vous s'il vous plaît regarder mon code et trouver un problème?asp.net mvc C# - problème de lecture de la base de données du serveur sql

cmd = new SqlCommand(); 
       cmd.Connection = connection; 
       cmd.CommandType = System.Data.CommandType.Text; 
       cmd.CommandText = @"SELECT ImageData, " 
           + " ContentType, " 
           + " ImageName " 
           + " FROM UsersImage " 
           + " WHERE UserName = @UserName "; 

       cmd.Parameters.Add(new SqlParameter("@UserName", ThreadUserName)); 

       reader = cmd.ExecuteReader(); 
      if (reader["ContentType"] != DBNull.Value) 
      { 
       ContentType = Convert.ToString(reader["@ContentType"]); 
      } 

      if (reader["ImageName"] != DBNull.Value) 
      { 
       ImageName = Convert.ToString(reader["@ImageName"]); 
      } 

      if (reader["ImageData"] != DBNull.Value) 
      { 
       ImageData = Convert.ToByte(reader["@ImageData"]); 
      } 

      int affectedRows = cmd.ExecuteNonQuery(); 
      if (affectedRows != 1) 
      { 

      } 

      reader.Close(); 

Mon nom de table est: UsersImage.

Mes colonnes, ImageData (image), ContentType (nvarchar50), ImageName (nvarchar50), UserName (varchar20)

+1

Avez-vous une exception? Est-ce que ça marche? Il n'est pas possible pour nous de déboguer votre code en le regardant. –

+1

vous avez certainement des lignes dans la DB? Vous pouvez également penser à utiliser un ORM - Castle ActiveRecord est super facile à déplacer avec - bat tout ce bordel avec inline sql :) – iwayneo

+1

Amen sur ORM, ont utilisé Active Record et assez facile une fois que vous y aller. Je dirais que ce type de codage devrait être retiré dès que possible. Est très inefficace et sujet à la douleur (comme vous vous sentez maintenant) – ArtificialGold

Répondre

3

Ajouter à reader.Read().

cmd = new SqlCommand(); 
       cmd.Connection = connection; 
       cmd.CommandType = System.Data.CommandType.Text; 
       cmd.CommandText = @"SELECT ImageData, " 
           + " ContentType, " 
           + " ImageName " 
           + " FROM UsersImage " 
           + " WHERE UserName = @UserName "; 

       cmd.Parameters.Add(new SqlParameter("@UserName", ThreadUserName)); 

using (IDataReader reader = cmd.ExecuteReader()) 
{ 

    if (reader.Read()) 
    { 
     if (reader["ContentType"] != DBNull.Value) 
     { 
      ContentType = Convert.ToString(reader["ContentType"]); 
     } 

     if (reader["ImageName"] != DBNull.Value) 
     { 
      ImageName = Convert.ToString(reader["ImageName"]); 
     } 

     if (reader["ImageData"] != DBNull.Value) 
     { 
      ImageData = Convert.ToByte(reader["ImageData"]); 
     } 

     int affectedRows = cmd.ExecuteNonQuery(); 
     if (affectedRows != 1) 
     { 

     } 
    } 
} 

EDIT: J'ai ajouté dans une utilisation pour remplacer le lecteur.Fermer().

+0

je trouve que mon seul problème était que je lis avec @. il devrait être sans @ (lecteur ["ImageName"]) à la place (lecteur ["@ ImageName"]). que cela. –

0
string sql = @"SELECT ImageData, ContentType, ImageName FROM UsersImage WHERE UserName = @UserName"; 

    using (var cn = new SqlConnection("[YOUR CONNECTION STRING]")) 
    using (var cmd = new SqlCommand(sql, cn)) 
    { 
     // Set some properties on the cmd object 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.AddWithValue("@UserName", ThreadUserName); 

     // Open the connection 
     cn.Open(); 

     // Execute your command and get back a data reader 
     using (var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
     { 
      if (reader.HasRows) 
      { 
       reader.Read(); 

       if (reader["ContentType"] != DBNull.Value) 
       { 
        ContentType = reader["ContentType"].ToString(); 
       } 
       if (reader["ImageName"] != DBNull.Value) 
       { 
        ImageName = reader["ImageName"].ToString(); 
       } 
       if (reader["ImageData"] != DBNull.Value) 
       { 
        ImageData = (byte[])reader["ImageData"]; 
       } 
      } 
     } 
    } 
Questions connexes