2016-04-14 26 views
2
檢索圖像數據庫

好了,所以我用用用VARBINARY使用文件上傳

HttpPostedFile postedFile = eventImage.PostedFile; 
     string fileExtension = Path.GetExtension(postedFile.FileName); 

     if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".png") 
     { 
      Stream stream = postedFile.InputStream; 
      BinaryReader reader = new BinaryReader(stream); 
      byte[] imgByte = reader.ReadBytes((int)stream.Length); 
      con = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-StudentMoneySaver-20160203040444.mdf;Initial Catalog=aspnet-StudentMoneySaver-20160203040444;Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand("insert into Events (AspNetUsersId,EvtName,EvtType,EvtDescription,EvtDate,EvtVote, EvtImage) values (@AspNetUsersId, @EvtName, @EvtType, @EvtDescription, @EvtDate, @EvtVote, @EvtImage)", con); 

      cmd.Parameters.AddWithValue("@AspNetUsersId", userId); 
      cmd.Parameters.AddWithValue("@EvtName", eventName.Text); 
      cmd.Parameters.AddWithValue("@EvtType", eventType.Text); 
      cmd.Parameters.AddWithValue("@EvtDescription", eventDescription.Text); 
      cmd.Parameters.AddWithValue("@EvtDate", datetimepicker.Value); 
      cmd.Parameters.AddWithValue("@EvtVote", 0); 
      cmd.Parameters.Add("@EvtImage", SqlDbType.VarBinary).Value = imgByte; 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
     } 

將它添加到數據庫,並嘗試使用

byte[] imgByte = null; 
     con = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-StudentMoneySaver-20160203040444.mdf;Initial Catalog=aspnet-StudentMoneySaver-20160203040444;Integrated Security=True"); 
     SqlCommand cmd = new SqlCommand("SELECT * FROM Events", con); 
     con.Open(); 
     DataSet ds = new DataSet(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(ds); 
     foreach (DataRow dr in ds.Tables[0].Rows) 
     { 
      string str = Convert.ToBase64String(imgByte); 
      imageTest.Src = "data:Image/png;base64," + str; 
     } 

與調用只是圖像前端代碼是

<img runat="server" id="imageTest" src="imageIDtagName" /> 

我收到錯誤消息「值不能爲空。 霸rameter名稱:inArray

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.ArgumentNullException:值不能爲空。 參數名:inArray」我想我接近

Events Table

+0

你可以檢查數據庫,圖像列是否正確設置。例如與SQL Server Managment Studio –

+0

嗨。圖像列設置爲varbinary(MAX) – Stuart

+0

你沒有清楚地說明什麼是不工作的,以及你在做什麼。保存操作是否正常工作,如果是,那麼文件名屬性是什麼?當你嘗試加載它會發生什麼?請在運行代碼時發佈正在發生的事情。 –

回答

4

如果你想從SQL加載圖片,你做這樣的:

byte[] imgByte = null; 

SqlCommand cmd = new SqlCommand("SELECT Image FROM tableName",yourConnectionStringHere); 
DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
da.fill(ds); 
foreach(DataRow dr in ds.Tables[0].Rows) 
{ 
    imgByte = (byte[])(dr["ImageColumnNameHere"].ToString()); 
    string str = Convert.ToBase64String(imgByte); 
    imageIDtagName.Src = "data:Image/png;base64," + str; 
} 

使用文件上傳保存圖像做過這樣的:

HttpPostedFile postedFile = imgFile.PostedFile; 
string fileExtension = Path.GetExtension(postedFile.FileName); 

if (fileExtension.ToLower() == ".jpg" || fileExtension.ToLower() == ".png") 
{ 
      Stream stream = postedFile.InputStream; 
      BinaryReader reader = new BinaryReader(stream); 
      byte[] imgByte = reader.ReadBytes((int)stream.Length); 
    SqlCommand cmd = new Sqlcommand("INSERT INTO tableName(Image) VALUES(@img)",yourConnectionStringHere); 
cmd.Parameters.Add("@img",SqlDbType.VarBinary).Value = imgByte; 
    cmd.ExecuteNonQuery(); 
} 

PS環繞你的SqlConnection使用的語句像

using(SqlConnection con = new SqlConnection("")) 
{ 
    //your code here 
} 

救你脫離做con.Open()con.Close()

編輯: 要訪問src成爲html標籤財產,只是在你的HTML標記添加runat="server"

+0

非常感謝您的幫助,我有一個小小的錯誤,並且我編輯了我的代碼,感謝您的幫助! – Stuart

+0

在哪個部分您會遇到錯誤? –

+0

aaah所以您有一列名爲inArray ? –