图像上传到数据库

时间:2013-05-20 02:25:59

标签: c# asp.net sql

所以我设法建立了一个简单的测试页面来上传图像并将图像存储到我的数据库中,但我不确定存储是否成功。

每当我将图像存储到Image列下的数据类型为Image的表格中时,这就是新行<Binary data>中的内容。这是<Binary data>的形象吗?

我希望它能以'0'和'1'显示图像,这样我就可以比较存储的不同项目。但是“存储”是否意味着我的图像已成功存储?

我的网站的逻辑用c#编码。

此外,我一直试图找到有关如何检索我的图像以供显示的示例的来源。

这是我当前的插入声明

SqlCommand com = new SqlCommand("insert into ImageTotable "
    + "(myphoto,name) values (@photo, @name)", con);

要检索数据会有效吗?

SqlCommand com2 = new SqlCommand("Select * from ImageTotable WHERE userid ='1'", con);

因此,如果我使用datareader存储所选项目,我可以将图像存储到哪个以便显示,标签,图像按钮等?

如何将图像存储到变量中?例如,如果我想存储文本,我会使用:

pw = dr["password"].ToString();**  

因此对于图像会是什么样的?

编辑:单击事件的完整按钮以处理图像存储

    protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=*;Initial Catalog=*;Integrated Security=True");
    if (!FileUpload1.HasFile)
    {
        Label1.Visible = true;
        Label1.Text = "Please Select Image File";    //checking if file uploader has no file selected


    }
    else
    {
        int length = FileUpload1.PostedFile.ContentLength;
        byte[] pic = new byte[length];


        FileUpload1.PostedFile.InputStream.Read(pic, 0, length);

        try
        {


            con.Open();
            SqlCommand com = new SqlCommand("insert into ImageTotable "
              + "(myphoto,name) values (@photo, @name)", con);
            com.Parameters.AddWithValue("@photo", pic);
            com.Parameters.AddWithValue("@name", TextBox1.Text);
            com.ExecuteNonQuery();
            Label1.Visible = true;
            Label1.Text = "Image Uploaded Sucessfully";  //after Sucessfully uploaded image

        }
        finally
        {
             con.Close();
        }

    }
}

4 个答案:

答案 0 :(得分:0)

首先,Db中的Image类型映射到C#中的Byte[],因此您应该在插入数据库之前将图像转换为Byte[]。要从数据库中检索图像,可以使用以下代码:

 MemoryStream stream = new MemoryStream(Byte[]);// you can read the image by dataadapter or datareader
 System.Drawing.Image img = System.Drawing.Image.FromStream(stream);

以下是一个很好的链接:http://www.aspdotnet-suresh.com/2011/01/how-to-insert-images-into-database-and.html并希望它能为您提供帮助。

答案 1 :(得分:0)

答案 2 :(得分:0)

这总能帮助我。 'fileupload'是文件上载控件名称。

protected void Upload_btn(object sender, EventArgs e)
{
  if (fileupload.HasFile)
   {
     if (fileupload.PostedFile.FileName == "")
      {}
     else
      {
       try
        {
          int filesize = fileupload.PostedFile.ContentLength;
          if (filesize > 819200)
           {Label1.Text = "File Size Should be Less than 800Kb";
            }
           else
           {string serverFileName = Path.GetFileName(fileupload.PostedFile.FileName);
            byte[] documentBinary = new byte[filesize];
            fileupload.PostedFile.InputStream.Read(documentBinary, 0, filesize);

            string mainquery = "";
            mainquery = "insert into table(DocName,DocSize,Data,ContentType)       values(@DocName,@DocSize,@Data,@ContentType)";
            con.Open();
            SqlCommand files_insert_cmd = new SqlCommand(mainquery,con);
            files_insert_cmd.Parameters.AddWithValue("@DocName", serverFileName);
            files_insert_cmd.Parameters.AddWithValue("@DocSize",fileupload.PostedFile.ContentLength);
            files_insert_cmd.Parameters.AddWithValue("@Data", documentBinary);
         files_insert_cmd.Parameters.AddWithValue("@ContentType",fileupload.PostedFile.ContentType);
            files_insert_cmd.ExecuteNonQuery();

            con.Close();
         }
     }
  catch (Exception e1)
      {
         Label1.Text = e1.ToString();
         Label1.Visible = true;
      }

   }
 }
}

答案 3 :(得分:0)

提前抱歉,因为我要问一个愚蠢的问题。你如何检查表中的数据?你右键点击表并选择编辑前200行 如果您喜欢这样,它将始终显示为&lt;二进制数据&gt;如果您运行sql查询,您可以在varbinary(max)列或Image列

中看到实际字符