Asp.net 解决错误:对象引用未设置为对象的实例
我在使用FileUpload上传图像文件时收到此eror。我在要插入的按钮单击事件中遇到此错误Asp.net 解决错误:对象引用未设置为对象的实例,asp.net,c#-4.0,Asp.net,C# 4.0,我在使用FileUpload上传图像文件时收到此eror。我在要插入的按钮单击事件中遇到此错误 public int InsertData(ProductPhoto prdctphoto) { int ans = 0; SqlCommand cmd = DataConnection.GetConnection().CreateCommand(); cmd.CommandText = "prcProduct
public int InsertData(ProductPhoto prdctphoto)
{
int ans = 0;
SqlCommand cmd = DataConnection.GetConnection().CreateCommand();
cmd.CommandText = "prcProductPhoto";
cmd.CommandType = CommandType.StoredProcedure;
// cmd.Parameters.Add(new SqlParameter("@PhotoID", prdctphoto.PhotoID));
cmd.Parameters.Add(new SqlParameter("@PhotoName", prdctphoto.PhotoName));
cmd.Parameters.Add(new SqlParameter("@ExtName", prdctphoto.ExtName));
cmd.Parameters.Add(new SqlParameter("@PhotoType", prdctphoto.PhotoType));
cmd.Parameters.Add(new SqlParameter("@PhotoSize", prdctphoto.PhotoSize));
cmd.Parameters.Add(new SqlParameter("@ProductID", prdctphoto.ProductID));
ans = int.Parse(cmd.ExecuteScalar().ToString());
cmd.Dispose();
DataConnection.CloseConnection();
return ans;
}
我正在纠正错误
ans=int.Parsecmd.ExecuteScalar.ToString
我的存储过程的代码是
create proc prcProductPhoto
(
@PhotoName Varchar(100),
@ExtName Varchar(100),
@PhotoType Varchar(100),
@PhotoSize int,
@ProductID Int
)
as
insert into ProductPhoto(PhotoName,ExtName,PhotoType,PhotoSize,ProductID) values (@PhotoName,@ExtName,@PhotoType,@PhotoSize,@ProductID)
按钮点击事件的代码是
protected void Insert_Click(object sender, EventArgs e)
{
try
{
if (photoupload.HasFile)
{
ProductPhoto prdctphoto = new ProductPhoto();
prdctphoto.PhotoName = photoupload.FileName;
prdctphoto.PhotoSize = photoupload.PostedFile.ContentLength;
prdctphoto.PhotoType = photoupload.PostedFile.ContentType;
prdctphoto.ExtName = prdctphoto.PhotoName.Substring(prdctphoto.PhotoName.LastIndexOf(".") + 1);
prdctphoto.ProductID = int.Parse(ddlproductname.SelectedValue);
//Response.Write(data.ExtName);
int ans = new InsertAction().InsertData(prdctphoto);
if (ans != 0)
{
string path = Server.MapPath("~/upload/") + ans.ToString() + "." + prdctphoto.ExtName;
photoupload.SaveAs(path);
Response.Write(" File is Uploaded ");
}
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
今天早些时候我遇到了这个问题。此错误意味着您应该在ans中初始化的值为空。尝试调试它并确保它实际存储了一个值 将从查询生成的第一个结果集的第一行返回第一列的值 存储过程不返回任何结果集,因此ExecuteScalar将返回null。当您调用cmd.ExecuteScalar.ToString时,您正在对null实例调用一个方法,这就是为什么您会得到一个NullReferenceException 要解决此问题,需要更改存储过程以返回适当的值。从查询中看不出该值应该是什么,但假设ProductPhoto表上有一个要返回的标识列,可以尝试以下操作:
create proc prcProductPhoto
(
@PhotoName varchar(100),
@ExtName varchar(100),
@PhotoType varchar(100),
@PhotoSize int,
@ProductID Int
)
As
insert into ProductPhoto
(
PhotoName,
ExtName,
PhotoType,
PhotoSize,
ProductID
)
values
(
@PhotoName,
@ExtName,
@PhotoType,
@PhotoSize,
@ProductID
)
select Scope_Identity()
您的SP是否确实返回了一个数字?我的Crystal ball今天正在维护中,因此您可以显示存储过程的代码吗?因此您可以测试结果的值,重新编写代码,如下所示:var result=cmd.ExecuteScalar;ans=int.Parseresult.ToString;,通过这种方式,您可以在var结果行上放置断点,以便在尝试将查询结果硬塞入int之前查看查询结果。非常感谢您,先生。。。因为帮助了我,我并没有特权去投票,但无论何时我得到了,我都会为你投票。谢谢