0

Telerik RadAsyncUpload を使用してロードされた画像を表示する Telerik RadBinaryImage コントロールがあります。

「写真」列 (画像データ型) を含む 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)' は、指定されていないパラメータ '@Photo' を期待しています。

RadBinaryImage1.DataValue を画像に変換する必要がありますか?

4

2 に答える 2

1

このRadBinaryImageコントロールは、データベースからの画像を表示するために使用されます。したがって、シーケンスは次のようになります。

  1. ユーザーは次の方法で写真をアップロードしますRadUpload
  2. 変更されたコードを使用してデータベースに保存された画像 (以下を参照)
  3. PostBack では、ページはデータベースからの画像を表示します。RadBinaryImage

すぐにデータベースに保存したくない場合は、何らかの方法でデータを自分で永続化する必要があります (ファイルをファイルシステムに保存してから、 経由RadBinaryImage.SavedImageNameでパスにアクセスするか、 としてメモリに永続化することができますSession["UploadedImage"])。要点は、RadBinaryImage はページに画像を表示するためだけのものです。

サンプル コードに関しては、varbinary代わりにSQL 列タイプを使用することをお勧めします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

于 2012-12-05T18:11:00.857 に答える
0

最も安全な方法は、イメージをバイト配列としてアップロードすることです。

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

バイト配列の取得方法が異なります。ASP.NET Upload コントロールを使用すると、次のようになります。

yourByteArray = FileUpload1.FileBytes;

または、画像がストリームとして表されている場合:

var yourByteArray = new Byte[ImageObject.InputStream.Length];
ImageObject.InputStream.Read(yourByteArray, 0, yourByteArray.Length);
于 2012-12-04T15:12:34.357 に答える