1

この(一種の)質問が何度も尋ねられ、回答されていることも知っています。私自身、以前に一度質問したことがあります。しかし、私はまだ成功していません。特定の従業員 ID の画像コントロールに画像を表示するにはどうすればよいですか...私のコードは次のとおりです。

` bind() GridView1.Visible = "True"

    Dim strQuery As String = "SELECT Image FROM EmployeeTable WHERE EmployeeID =@EmployeeID"
    Dim cmd As SqlCommand = New SqlCommand(strQuery)
    cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value() = Convert.ToInt32(Request.QueryString("ImageID"))
    Dim dt As DataTable = GetData(cmd)
    If dt IsNot Nothing Then
        **Dim bytes() As Byte = CType(dt.Rows(1)("Image"), Byte())**
        Response.Buffer = True
        Response.Charset = ""
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.ContentType = dt.Rows(0)("ContentType").ToString()
        Response.AddHeader("content-disposition", "attachment;filename=" + dt.Rows(1)("Name").ToString())
        Response.BinaryWrite(bytes)
        Response.Flush()
        Response.End()
    End If` 

太字の行でエラーが発生しています。「位置1に行がありません」...実際には、特定の従業員IDの画像を取得(表示)したいです。列の位置にどのように関係しますか? なぜそのコード行を書いたのかわかりません。とにかく、私はこれを手伝ってくれる人がいることを知っているので、事前に彼らに感謝します...

OK、画像をデータベースに追加するための私のコードは次のとおりです。これはうまくいっています。

 Dim imageData As Byte() = New Byte(FileUpload1.FileContent.Length) {}
    FileUpload1.FileContent.Read(imageData, 0, Convert.ToInt32(FileUpload1.FileContent.Length))

    Dim con As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionString").ToString)
    con.Open()
    If EmployeeIDTextBox.Text = "" Then
        MsgBox("Please Enter EmployeeID to Add Photo")
    Else
        Dim com As New SqlCommand("UPDATE EmployeeTable SET IMAGE = @IM where EmployeeID='" & EmployeeIDTextBox.Text & "'", con)
        Dim filePath As String = Server.MapPath(FileUpload1.FileName)
        'Dim imageData As Byte() = File.ReadAllBytes(filePath)
        com.Parameters.AddWithValue("@IM", imageData)
        com.ExecuteNonQuery()
        MsgBox("File Saved Successfully!")
    End If
End Sub

そして今、これは画像コントロールで同じ画像を取得して表示するための私のコードです...

  bind()
    GridView1.Visible = "True"
    'If Request.QueryString("ImageID") IsNot Nothing Then
    Dim strQuery As String = "SELECT Image FROM EmployeeTable WHERE EmployeeID =@EmployeeID"
    Dim cmd As SqlCommand = New SqlCommand(strQuery)
    cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value() = Convert.ToInt32(Request.QueryString("Image"))
    Dim dt As DataTable = GetData(cmd)
    If dt IsNot Nothing Then
        Dim bytes() As Byte = CType(dt.Rows(0)("Image"), Byte())
        Response.Buffer = True
        Response.Charset = ""
        Response.Cache.SetCacheability(HttpCacheability.NoCache)
        Response.ContentType = dt.Rows(0)("ContentType").ToString()
        Response.AddHeader("content-disposition", "attachment;filename=" + dt.Rows(1)("Name").ToString())
        Response.BinaryWrite(bytes)
        Response.Flush()
        Response.End()
    End IF

これは機能していません...

4

2 に答える 2

0

配列インデックスは 0 から始まります

使用する

Dim bytes() As Byte = CType(dt.Rows(0)("Image"), Byte())

なぜそんなことを書いたのかわからないのですか?

あなたが持っているコードは、ユーザーに自分のPCに画像ファイルを保存するように促します.
イメージ コントロールにイメージは表示されません。

于 2013-03-04T04:39:59.427 に答える
0

U は Http ハンドラーを使用して、以下のコードを使用できますProcessRequest()

int Id = Convert.ToInt32(Request.QueryString["ImgId"]);
using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand(
"SELECT ImageFile FROM ImageTable WHERE ImageId = @ImgId", conn))
{
    command.Parameters.Add("@ImgId", SqlDbType.Int).Value = Id ;
conn.Open();
Response.ContentType = "image/gif"; //u can set it per ur requirement
Response.BinaryWrite((byte[]) command.ExecuteScalar());
}

次に、ページで画像を次のように使用します。

  <asp:Image id="Img_Db" runat="server" ImageUrl="Image.ashx?ImgId=1"/>
于 2013-03-04T06:46:09.090 に答える