2013-02-28 102 views
0

我在SQL Server数据库中有一些图像,我想在ASP.NET中检索这些图像。但它给了我一个错误如何使用C#在ASP.NET中从SQL Server数据库检索图像?

文件 'C:\ Program Files文件\ Common Files文件\微软 共享\ DevServer \ 10.0 \ 130065367816821657' 已经存在。

请解决我的问题。

protected void DropDownList1_TextChanged(object sender, EventArgs e) 
{ 
     cn.Open(); 
     SqlCommand cm = new SqlCommand("select * from imageCollection where img_id='" + DropDownList1.SelectedItem.ToString() + "'", cn); 
     SqlDataAdapter da = new SqlDataAdapter(cm); 
     SqlDataReader dr = cm.ExecuteReader(); 

     try 
     { 
      if (dr.Read()) 
      { 

       string image1 = Convert.ToString(DateTime.Now.ToFileTime()); 
       string image2 = Convert.ToString(DateTime.Now.ToFileTime()); 
       FileStream fs1 = new FileStream(image1, FileMode.CreateNew, FileAccess.Write); 
       FileStream fs2 = new FileStream(image2, FileMode.CreateNew, FileAccess.Write); 
       byte[] bimage1 = (byte[])dr["passport_photo"]; 
       byte[] bimage2 = (byte[])dr["sign_photo"]; 
       fs1.Write(bimage1, 0, bimage1.Length - 1); 
       fs2.Write(bimage2, 0, bimage2.Length - 1); 
       fs1.Flush(); 
       fs2.Flush(); 
       Image1.ImageUrl = "~/images"+bimage1.ToString(); 
       Image2.ImageUrl = "~/images"+bimage2.ToString(); 
      } 
      dr.Close(); 
      cn.Close(); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

我已上载图像从 “C:\ Program Files文件\共同文件\ Microsoft共享\ DevServer \ 10.0” 和前端代码是如下的:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string image1 = FileUpload1.FileName; 
    string image2 = FileUpload2.FileName; 
    FileStream fs1 = new FileStream(image1, FileMode.Open, FileAccess.Read); 
    FileStream fs2 = new FileStream(image2, FileMode.Open, FileAccess.Read); 
    byte[] bimage1 = new byte[fs1.Length]; 
    byte[] bimage2 = new byte[fs2.Length]; 
    fs1.Read(bimage1, 0, Convert.ToInt32(fs1.Length)); 
    fs2.Read(bimage2, 0, Convert.ToInt32(fs2.Length)); 
    fs1.Close(); 
    fs2.Close(); 
    cn.Open(); 
    SqlParameter sp = new SqlParameter(); 
    sp.SqlDbType = SqlDbType.Image; 
    sp.ParameterName = "@passport_photo"; 
    sp.ParameterName = "@sign_photo"; 
    sp.Value = bimage1; 
    sp.Value = bimage2; 
    SqlCommand cm = new SqlCommand("INSERT INTO imageCollection values(@img_id," + "@passport_photo,"+"@sign_photo)", cn); 
    cm.Parameters.AddWithValue("@img_id",TextBox1.Text); 
    cm.Parameters.AddWithValue("@passport_photo",sp.Value=bimage1); 
    cm.Parameters.AddWithValue("@sign_photo",sp.Value=bimage2); 
    cm.ExecuteNonQuery(); 
    cm.Dispose(); 
    cn.Dispose(); 
    cn.Close(); 
} 

}

+0

'DateTime now = DateTime.Now;'在第一个字符串之前,'now = DateTime.Now;'在第二个之前也可以。奥古斯丁的方式是更好的 – t3hn00b 2013-02-28 15:27:37

+1

你也可以考虑使用'using'语句。 – Arran 2013-02-28 15:27:59

回答

5

你的问题是image1image2是平等的。

string image1 = Convert.ToString(DateTime.Now.ToFileTime()); 
string image2 = Convert.ToString(DateTime.Now.ToFileTime()); 

考虑用什么来区分两个文件名称:

string image1 = Convert.ToString(DateTime.Now.ToFileTime()) + "1"; 
string image2 = Convert.ToString(DateTime.Now.ToFileTime()) + "2"; 

你可以想像,涉及的代码创建的文件名Convert.ToString(DateTime.Now.ToFileTime())执行非常快,因此没有足够的时间让DateTime.Now增加其值。

编辑

您也可以改变其中的图像都写入目录:

FileStream fs1 = new FileStream(Server.MapPath("~/images/" + image1), FileMode.CreateNew, FileAccess.Write); 
FileStream fs2 = new FileStream(Server.MapPath("~/images/" + image2), FileMode.CreateNew, FileAccess.Write); 

否则,该文件被写入应用程序文件夹(bin

然后

Image1.ImageUrl = "~/images/" + image1; 
Image2.ImageUrl = "~/images/" + image2; 

现在有意识

确保ASP.NET用户在“图像”文件夹中具有写入权限。

+0

你好,现在它不显示错误,但它不显示图像在asp.net图像控制。请找到解决方案。谢谢.... – 2013-02-28 15:31:34

+0

我试过你的上面写的代码。现在,它提示错误“无法找到路径的一部分”E:\ Visual Studio 2010 \ WebSites \ WebSite7 \ images \ 1300654290703737531'。“ – 2013-02-28 16:35:25

+0

好像'image'文件夹不存在。你是否证实该文件夹存在? – 2013-02-28 17:03:33

0

而且,您的代码设置抛出一个错误,如果有重复的文件名的文件中找到:

FileStream fs1 = new FileStream(image1, FileMode.CreateNew, FileAccess.Write); 
FileStream fs2 = new FileStream(image2, FileMode.CreateNew, FileAccess.Write); 

下面的代码将允许一个文件被覆盖,通过改变FileMode.CreateNewFileMode.Create

FileStream fs1 = new FileStream(image1, FileMode.Create, FileAccess.Write); 
FileStream fs2 = new FileStream(image2, FileMode.Create, FileAccess.Write); 
+0

你好,亲爱的...我想你上面写的代码,它的显示错误“无法找到文件C:\ Program Files文件\ Common Files文件\ Microsoft共享\ DevServer \ 10.0 \ 130064619000881758'“。 – 2013-02-28 15:52:42

+0

这是在图像保存到做。这确实是一个不同的问题。 – rhughes 2013-02-28 15:57:35

+0

我在图像格式保存在我的SQL Server数据库的图像。我已经从前端上传图片。 – 2013-02-28 16:06:45

相关问题