2012-12-04 39 views
0

我有一個Telerik RadBinaryImage控件,它顯示使用Telerik RadAsyncUpload加載的圖像。如何將Telerik RadBinaryImage圖像保存到SQL Server數據庫

我有一個包含'照片'列(圖像數據類型)的SQL表。我想從Telerik的RadBinaryImage保存到數據庫中的圖像插入功能看起來像這樣:

Private Sub InsertPhotoIntoDB() 
     Dim sMyConn As String = My.Settings.appDBConnString 
     Dim myConnection As SqlConnection 
     Dim myCommand As New SqlCommand 
     myConnection = New SqlConnection(sMyConn) 

     myConnection.Open() 

     myCommand = New SqlCommand("INSERT INTO Photos(Photo) VALUES(@Photo)") 
     myCommand.Connection = myConnection 

     myCommand.Parameters.Add("@Photo", SqlDbType.Image, 0, "Photo") 
     myCommand.Parameters("@Photo").Value = WhatDoIPutHere??? 

     myCommand.ExecuteNonQuery() 

     myConnection.Close() 
     myConnection.Dispose() 
End Sub 

我已經試過: myCommand.Parameters.Add("@Photo", SqlDbType.Image).Value = RadBinaryImage1.DataValue 但我仍然得到一個錯誤:

的參數化查詢'(@Photo image)INSERT INTO Photos(Photo)VALUES(@Photo)'expect'parameter'@Photo',which not supply。

我是否需要將RadBinaryImage1.DataValue轉換爲圖像?

回答

0

最安全的方式是將圖片上傳的字節數組:

Byte[] yourByteArray; 
... 
myCommand.Parameters.AddWithValue("@Photo", yourByteArray); 

如何獲得字節數組不同。隨着ASP.NET上傳控件,它只是:

yourByteArray = FileUpload1.FileBytes; 

,或者圖像表現爲流:

var yourByteArray = new Byte[ImageObject.InputStream.Length]; 
ImageObject.InputStream.Read(yourByteArray, 0, yourByteArray.Length); 
+0

謝謝你,但我怎麼能應用此Telerik的RadBinaryImage? – milo2011

+0

嘗試將'yourByteArray'設置爲Telerik控件的'DataValue'屬性? – Andomar

1

RadBinaryImage控件用於顯示圖像來自數據庫。所以,該序列應該是這樣的:

  1. 用戶上傳的照片經由RadUpload
  2. 使用修改後的代碼存儲在數據庫中的圖像(見下文)
  3. 在回發,頁從數據庫中使用顯示圖像RadBinaryImage

如果您不想在數據庫中存儲的權利的時候,你需要自己堅持的數據以某種方式(可以存儲在文件系統中的文件,然後通過RadBinaryImage.SavedImageName訪問路徑,或持續在米emory爲Session["UploadedImage"])。底線是RadBinaryImage僅用於在頁面上顯示圖像。

關於您的示例代碼,我推薦使用SQL列類型varbinary而不是image

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _ 
     Handles Button1.Click 
     For Each file As UploadedFile In RadUpload1.UploadedFiles 
      Dim bytes(file.ContentLength - 1) As Byte 
      file.InputStream.Read(bytes, 0, file.ContentLength) 
      Dim connection As OleDbConnection = CreateConnection() 
      Try 
       Dim command As New OleDbCommand("INSERT INTO Images ([Name], [Size], [Content]) VALUES (?, ?, ?)", connection) 
       command.Parameters.AddWithValue("@Name", file.GetName()) 
       command.Parameters.AddWithValue("@Size", bytes.Length) 
       command.Parameters.AddWithValue("@Content", bytes) 
       connection.Open() 
       command.ExecuteNonQuery() 
      Finally 
       If connection.State = Data.ConnectionState.Open Then 
        connection.Close() 
       End If 
      End Try 
     Next 
    End Sub 

看到這個職位的示例代碼和詳細的解釋: http://www.telerik.com/help/aspnet-ajax/upload-manipulating-files.html

+0

謝謝你,msigman。我認爲錯誤(參數化查詢..沒有提供)發生,因爲RadBinaryImage不會保留數據,所以沒有什麼可以保存在數據庫中。我上傳並將其顯示在RadBinaryImage控件中後,如何將數據保存在臨時文件中? – milo2011

+0

這就是我在我的答案中描述的方法。您需要先保存到數據庫,然後在PostBack上顯示到RadBinaryImage。 – msigman

相關問題