【问题标题】:Select multiple image files using fileupload control(ASP.net C#) and save it in database in one click.使用文件上传控件(ASP.net C#)选择多个图像文件并一键保存到数据库中。
【发布时间】:2014-02-21 13:26:09
【问题描述】:

我可以使用文件上传控件选择多个文件,但是当我尝试将其保存到数据库时,它给了我一个“对象引用未设置为对象的实例”错误。

if (FileUpload1.HasFiles)
{
     foreach (HttpPostedFile uploaded in FileUpload1.PostedFiles)
     {
         bindata = new BinaryReader(uploaded.InputStream);
         ImageByteArray = bindata.ReadBytes(uploaded.ContentLength);

         // byte array is sent to a method
         dbmt.SaveImageToDB(ImageByteArray);
     }
}

以下是我的 SaveImageToDB 方法的代码

public void SaveImageToDB(byte[] ImageByteArray)
{
    try
    {
        scon.Open();
        scm.Connection = scon;

        scm.CommandType = CommandType.StoredProcedure;
        scm.CommandText = "SaveProfileImage";

        SqlParameter paramImgArray = scm.Parameters.Add("@ImgBody", SqlDbType.Image,0);
        paramImgArray.Direction = ParameterDirection.Input;
        paramImgArray.Value = ImageByteArray;

        scm.ExecuteNonQuery();
    }
    catch( SqlException sqx )
    {
        throw sqx;
    }
}

【问题讨论】:

  • 代码的哪一行出现此错误?
  • 发生在 dbmt.SaveImageToDB() 中。创建 ImageByteArray(Byte[]) 后,我会将其发送到方法 dbmt.SaveImageToDB(ImageByteArray)。我什至会在使用“if(ImageByteArray != null )”调用该方法之前对其进行测试,它不为空。
  • 我要做的是遍历每个选定的文件并将每个文件转换为字节数组,然后发送到方法以便将其保存在数据库中。
  • 您是否使用过 asp.net 调试器来单步调试代码 (msdn.microsoft.com/en-us/library/8t6y55xx%28v=vs.80%29.aspx)?执行此操作并随时检查元素或设置监视将指出什么对象为空。
  • 谢谢。刚放假回来。谢谢你的问题。它促使我寻找正确的地方。问题是我没有初始化在 appcode 中调用函数的对象。我所做的是 DBmiddleTier dbmt;而不是 DBmiddleTier dbmt = new DBmiddleTier();。这就是为什么程序虽然 dbmt 为空。我一更改它就开始工作。非常感谢你们的帮助。当我还在上学的时候,我应该早就开始使用这个网站了。

标签: c# asp.net file-upload


【解决方案1】:

在文件上传控件中设置属性AllowMultiple = True

protected void uploadFile_Click(object sender, EventArgs e)
{
   if (UploadImages.HasFiles)
   {
       foreach (HttpPostedFile uploadedFile in UploadImages.PostedFiles)
       {
           uploadedFile.SaveAs(System.IO.Path.Combine(Server.MapPath("~/Images/"),
           uploadedFile.FileName));
           listofuploadedfiles.Text += String.Format("{0}<br/>", uploadedFile.FileName);
       }
   }

}

【讨论】:

  • 很抱歉我的问题不太清楚。这是我第一次来这里。我已将 AllowMultiple 设置为 true。我可以使用 fileupload 选择多个文件。我正在尝试做的是遍历每个选定的文件并将每个文件转换为字节数组,然后发送到方法以便可以将其保存在数据库中。
  • 谢谢。刚放假回来。谢谢你的问题。它促使我寻找正确的地方。问题是我没有初始化在 appcode 中调用函数的对象。我所做的是 DBmiddleTier dbmt;而不是 DBmiddleTier dbmt = new DBmiddleTier();。这就是为什么程序虽然 dbmt 为空。我一更改它就开始工作。非常感谢你们的帮助。当我还在上学的时候,我应该早就开始使用这个网站了。
【解决方案2】:

我知道它在所述方法中给出了错误,但是在该方法中的哪一行给出了这个错误?

我假设您在此处给出的方法是完整的(即在将其粘贴到此处之前没有您已删除的代码),所以我猜只有 2 个可能为空的对象,它们是“scon”和“单片机”。在“scon.Open();”行上放一个断点并在线“scm.Connection = scon;”。一旦在这些行中的每一行停止执行,将鼠标悬停在“scon”上,然后悬停在“scm”上。我猜它们中的任何一个都会为空。

希望这会有所帮助。

【讨论】:

  • 谢谢。刚放假回来。谢谢你的问题。它促使我寻找正确的地方。问题是我没有初始化在 appcode 中调用函数的对象。我所做的是 DBmiddleTier dbmt;而不是 DBmiddleTier dbmt = new DBmiddleTier();。这就是为什么程序虽然 dbmt 为空。我一更改它就开始工作。非常感谢你们的帮助。当我还在上学的时候,我应该早就开始使用这个网站了。
  • 如果此答案有帮助,请点赞和/或标记为答案。 :)
【解决方案3】:

问题是我的对象。它没有正确实例化。我正在访问 appcode 中名为 DBmiddleTier 的类来访问数据库并写入图像文件。这是我做错了什么: DBMiddleTier dbmt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2013-06-30
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多