2011-04-30 83 views
0

我想測試一個數據庫存儲圖像,所以我做了谷歌搜索,發現這個代碼:數據庫中存儲的圖像在C#中使用asp.net

cs文件:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Drawing; 
using System.Data.SqlClient; 
using System.IO; 
using System.Data; 


public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    string strImageName = Path.GetFileName(FileUploadControl.FileName); 
    FileUploadControl.SaveAs(Server.MapPath("~/") + strImageName); 


    Bitmap bNewImage = new Bitmap(strImageName); 
    FileStream fs = new FileStream(strImageName, FileMode.Open, FileAccess.Read); 

    //creating byte array to read image 

    byte[] bImage = new byte[fs.Length]; 


    fs.Read(bImage, 0, Convert.ToInt32(fs.Length)); 

    fs.Close(); 
    fs = null; 



    string connstr = "Server=WINSP3UE\\SqlExpress;Database=ImageStore;Trusted_Connection=True;"; 
    SqlConnection conn = new SqlConnection(connstr); 
    conn.Open(); 
    string strQuery; 

    strQuery = "insert into [dbo].[ImageStore](id,[ImageContent]) values(" + "1," + " @pic)";//"INSERT INTO ImageStore (ID, ImageContent) values (" + "1," + " @pic)"; 

    SqlParameter ImageParameter= new SqlParameter(); 
    ImageParameter.SqlDbType = SqlDbType.Image; 
    ImageParameter.ParameterName = "pic"; 
    ImageParameter.Value = bImage; 



    SqlCommand cmd = new SqlCommand(strQuery, conn); 
    cmd.Parameters.Add(ImageParameter); 
    cmd.ExecuteNonQuery(); 
    Response.Write("Image has been added to database successfully"); 



    cmd.Dispose(); 
    conn.Close(); 
    conn.Dispose(); 


} 

}

.aspx文件

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:FileUpload id="FileUploadControl" runat="server" /> 
    <asp:Button ID="Button1" runat="server" Text="Upload" /> 
</div> 
</form> 

它應該工作,但它不是,我的意思是它不更新數據庫,表中的值保持爲空。並且消息「圖像已成功上載到數據庫」也沒有出現。我正在使用的數據庫有一個名爲ImageStore的表,其中有兩個屬性ID和ImageContent。

我是新來的asp.net和c#,任何人都可以請檢查代碼的任何錯誤?

+0

您的參數名稱應該是@pic而不是pic。和其他人一樣,你應該通過調試器來運行它。有太多的事情可能會出錯。什麼樣的錯誤信息,你btw? – 2011-04-30 02:37:40

回答

0

我建議你在調試器中查看你的代碼。有太多可能會出錯的隨機猜測是有道理的。

+0

感謝您的回覆,是的,我會這樣做,祝我好運! :) – QPTR 2011-05-01 06:59:02

0

ImageParameter.ParameterName =「pic」;

ImageParameter.ParameterName = "@pic"; 
+0

感謝您的回覆! – QPTR 2011-05-01 06:55:24

1

你圖像標識的首先是在INSERT語句這是不好的硬編碼的:首先,如果ID設置爲自動遞增標識列,它會除非你在該表上設置標識插入拋出一個異常如果它沒有設置爲自動增量,則會得到重複的ID,這最終會導致主鍵違例。相反,省略ID插入並只執行內容插入。 只要參數去,igonre參數聲明刪除所有從strQuery定義到cmd創建。相反使用此:

strQuery = "insert into [dbo].[ImageStore]([ImageContent]) values(@pic)"; 

SqlCommand cmd = new SqlCommand(strQuery, conn); 
cmd.Parameters.AddWithValue("pic", bImage); 

if(cmd.ExecuteNonQuery()>0) 
    Response.Write("Image has been added to database successfully"); 
+0

非常感謝您的回答。我試過了,但仍然是同樣的問題,我會嘗試調試它,再次感謝! – QPTR 2011-05-01 06:54:28

相關問題