2009-11-08 5 views
0

Je tente d'enregistrer l'image des employés dans la base de données des employés. J'ai trois champs dans la table de base empid, empname, empimage. Voici ma partie de base de données.J'ai besoin d'aide pour enregistrer l'image dans la base de données sql en utilisant asp.net

CREATE DATABASE [Employee] 
GO 
USE [Employee] 
GO 
CREATE TABLE EmpDetails 
(
empid int IDENTITY NOT NULL, 
empname varchar(20), 
empimg image 
) 

le bouton événement click, je l'ai écrit le code suivant:

SqlConnection connection = null; 
    try 
    { 
     FileUpload img = (FileUpload)imgUpload; 
     Byte[] imgByte = null; 
     if (img.HasFile && img.PostedFile != null) 
     { 
      //To create a PostedFile 
      HttpPostedFile File = imgUpload.PostedFile; 
      //Create byte Array with file len 
      imgByte = new Byte[File.ContentLength]; 
      //force the control to load data in array 
      File.InputStream.Read(imgByte, 0, File.ContentLength); 
     } 
     // Insert the employee name and image into db 
     string conn = ConfigurationManager.ConnectionStrings["EmployeeConnString"].ConnectionString; 
     connection = new SqlConnection(conn); 

     connection.Open(); 
     string sql = "INSERT INTO EmpDetails(empname,empimg) VALUES(@enm, @eimg)SELECT @@IDENTITY"; 
     SqlCommand cmd = new SqlCommand(sql, connection); 
     cmd.Parameters.AddWithValue("@enm", txtEName.Text.Trim()); 
     cmd.Parameters.AddWithValue("@eimg", imgByte); 
     int id = Convert.ToInt32(cmd.ExecuteScalar()); 
     lblResult.Text = String.Format("Employee ID is {0}", id); 
    } 
    catch 
    { 
     lblResult.Text = "There was an error"; 
    } 
    finally 
    { 
     connection.Close(); 
    } 

Et voici ma forme:

<asp:Label ID="lblEmpName" runat="server" Text="Employee Name"></asp:Label> 
    &nbsp;&nbsp;&nbsp;&nbsp; 
    <asp:TextBox ID="txtEName" runat="server"></asp:TextBox> 
    <br /> 
    <asp:Label ID="lblImage" runat="server" Text="Employee Image"></asp:Label> 
    &nbsp;&nbsp;&nbsp;&nbsp; 
    <asp:FileUpload ID="imgUpload" runat="server" /> 
    <br /> 
    <br /> 
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
     onclick="btnSubmit_Click" /> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp  
    <asp:Label ID="lblResult" runat="server" ForeColor="#0066FF"></asp:Label> 
    <br /> 
    <hr /> 
    <asp:Image ID="Image1" style="width:200px" Runat="server" /> 

Mais quand je suis en train de charger une image et en cliquant sur soumettre le bouton obtenant cette erreur "Référence d'objet non définie sur une instance d'un objet." Pls quelqu'un signale mon erreur.

Merci, Sumit

+0

Pouvez-vous rendre service à tout le monde (vous-même) et formater correctement le code?Inclure également la pile d'appel – mfeingold

+0

Montrez-nous le formulaire, également sur quelle ligne obtenez-vous l'erreur? – AnthonyWJones

Répondre

1

erreurs de référence de l'objet ne se produisent que lorsqu'un objet est pas initialisé et que vous essayez de faire référence. Cela peut être n'importe quel objet référencé dans votre code. Si vous parcourez le code pendant le débogage, vous pouvez voir exactement quelle référence est nulle.

Vous avez une instruction if qui initialise l'objet imgByte:

imgByte = new Byte[File.ContentLength]; 

Si l'objet img se révèle être nul, ce code ne fonctionne pas. Ensuite, vous faites référence à l'imgByte ici, peu importe si oui ou non l'img était nulle:

cmd.Parameters.AddWithValue("@eimg", imgByte); 

Vérifiez le l'objet HttpPostedFile lui-même est non nul et déplacer l'initialisation de votre objet en dehors imgByte l'instruction if. En outre, le nom Fichier est déjà utilisé par l'objet System.IO.File. Vous voudrez peut-être le renommer simplement pour être sûr.

+0

Le débogueur Visual Studio a une option pour vous lancer dans le débogage sur n'importe quelle exception .NET, même si elle est gérée. C'est extrêmement utile, et je cours avec tout le temps. Sous le menu Débogage, cliquez sur "Exceptions ..." –

0

Je réorganiserais un peu votre code ADO.NET - le rendre plus sûr et plus fiable; aussi, je voudrais vous assurer de séparer les deux instructions SQL dans votre chaîne « sql » par un point-virgule pour faire comprendre à SQL que cela est deux commandes, vraiment:

string conn = ConfigurationManager.ConnectionStrings["EmployeeConnString"].ConnectionString; 

using(connection = new SqlConnection(conn)) 
{ 
    string sqlStmt = "INSERT INTO dbo.EmpDetails(empname, empimg) " + 
         "VALUES(@enm, @eimg); SELECT @@IDENTITY"; 

    using(SqlCommand cmd = new SqlCommand(sqlStmt, connection)) 
    { 
     cmd.Parameters.AddWithValue("@enm", txtEName.Text.Trim()); 
     cmd.Parameters.AddWithValue("@eimg", imgByte); 

     connection.Open(); 

     int id = Convert.ToInt32(cmd.ExecuteScalar()); 

     connection.Close(); 

     lblResult.Text = String.Format("Employee ID is {0}", id); 
    } 
} 

Toute chance avec ce ?? Sinon, vous devriez vraiment parcourir le code dans le débogueur et voir dans votre code vous faites référence à quelque chose qui est NULL (et vous ne vérifiez pas cette condition).

Marc

+0

Salut Alors que je débogue ce code, je reçois une exception dans cette ligne ... "string conn = ConfigurationManager.ConnectionStrings [" EmployeeConnString "]. ConnectionString;" L'exception est: La référence d'objet n'est pas définie sur une instance d'un objet. – Sumit

+0

alors évidemment, vous n'avez pas de chaîne de connexion appelée "EmployeeConnString" dans votre app.config ou web.config - vérifiez cela! –

0

Alors que je suis débogage ce code je suis faire exception dans cette ligne ... "string conn = ConfigurationManager.ConnectionStrings [" EmployeeConnString "] ConnectionString;". L'exception est la suivante: La référence d'objet n'est pas définie sur sur une instance d'un objet.

Vous devez ajouter une chaîne de connexion nommée EmployeeConnString à web.config.

Votre gestionnaire d'exceptions ne distingue pas exactement l'endroit où une exception s'est produite et émet un seul message d'erreur pour toute erreur éventuelle.

Questions connexes