我试图在员工数据库中保存员工形象。我在数据库表empid,empname,empimage中有三个字段。这是我的数据库部分。
CREATE DATABASE [Employee]
GO
USE [Employee]
GO
CREATE TABLE EmpDetails
(
empid int IDENTITY NOT NULL,
empname varchar(20),
empimg image
)
在按钮点击事件中,我编写了以下代码:
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();
}
以下是我的表格:
<asp:Label ID="lblEmpName" runat="server" Text="Employee Name"></asp:Label>
<asp:TextBox ID="txtEName" runat="server"></asp:TextBox>
<br />
<asp:Label ID="lblImage" runat="server" Text="Employee Image"></asp:Label>
<asp:FileUpload ID="imgUpload" runat="server" />
<br />
<br />
<asp:Button ID="btnSubmit" runat="server" Text="Submit"
onclick="btnSubmit_Click" />
 
<asp:Label ID="lblResult" runat="server" ForeColor="#0066FF"></asp:Label>
<br />
<hr />
<asp:Image ID="Image1" style="width:200px" Runat="server" />
但是当我上传任何图片并点击提交按钮时会出现此错误“对象引用未设置为对象的实例”。请有人指出我的错误。
谢谢, 萨米特
答案 0 :(得分:1)
对象引用错误仅在未初始化对象并尝试引用它时发生。这可以是您在代码中引用的任何对象。如果在调试时单步执行代码,则可以确切地看到哪个引用为空。
你有一个初始化imgByte对象的if语句:
imgByte = new Byte[File.ContentLength];
如果img对象为null,则该代码不会运行。然后你在这里引用imgByte,无论img是否为null:
cmd.Parameters.AddWithValue("@eimg", imgByte);
检查HttpPostedFile对象本身是否为null,并将您的imgByte对象初始化移到if语句之外。此外,System.IO.File对象已使用名称File。您可能希望重命名它只是为了安全。
答案 1 :(得分:0)
我会重新安排你的ADO.NET代码 - 让它安全可靠;另外,我会确保用分号分隔你的“sql”字符串中的两个SQL语句,以使SQL清楚这是两个命令,实际上:
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);
}
}
这运气好吗?否则,您应该逐步调试调试器中的代码,并在代码中看到 where ,引用一些NULL(并且不检查该条件)。
马克
答案 2 :(得分:0)
我正在调试此代码 在此获得例外 line ...“string conn = 。ConfigurationManager.ConnectionStrings [ “EmployeeConnString”]的ConnectionString;” 例外是:未设置对象引用 到一个对象的实例。
您需要将名为EmployeeConnString的连接字符串添加到web.config。
您的异常处理程序无法区分发生异常的位置,并针对任何可能的错误发出单个错误消息。