2012-12-04 116 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

相关问题