0

データベースへの画像の保存に問題があります。画像をデータベースに挿入または保存し、グリッドビューに表示する方法がわかりません。

私のテーブルのデザインは次のとおりです。

ここに画像の説明を入力

私のWebメソッドでは:

[WebMethod(EnableSession = true)]
public string sell_item(string name, Image photo, string description)
{
    SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=Bidding;Integrated Security=True");
    con.Open();
    SqlCommand cmd = new SqlCommand("UPDATE login SET name = @name, photo = @photo, description = @description WHERE username=@username", con);

    cmd.Parameters.AddWithValue("@name", name);
    cmd.Parameters.AddWithValue("@photo", photo);
    cmd.Parameters.AddWithValue("@description", description);

    cmd.ExecuteNonQuery();
    con.Close();
    return "Product has been upload successfully!";
}

Web サービスを呼び出す Web アプリケーションの私のコード:

FileUpload ボタンを使用して画像ファイルを選択します。

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = Convert.ToString(a.sell_item(Convert.ToString(TextBoxName.Text), Convert.ToString(FileUploadPhoto.FileName), Convert.ToString(TextBoxDescription.Text)));

    Label1.Visible = true;
    if (Label1.Visible == true)
    {
        MessageBox.Show("Item has been uploaded successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
        Response.Redirect("Menu page.aspx");
    }
}

私のグリッドビューでは、プロパティを設定しました: ここに画像の説明を入力

画像はグリッドビューに表示されません。私はまだC#に不慣れです。誰でも私を助けることができますか?ありがとう。

4

3 に答える 3

1

画像をデータベースに保存する方法については、こちらの記事をご覧ください。画像を保存しようとしているデータベース/列のタイプに関する詳細情報も役立ちます。また、グリッドビューのコードかもしれません。

編集: この投稿には、画像列への保存に関する役立つコードがいくつかあります。

于 2013-01-24T16:50:47.417 に答える
1

イメージがデータベースに正しく保存されない場合は、バイト配列で保存してみてください。

protected void Button1_Click(object sender, EventArgs e)
{
    if (fileUploadPhoto.HasFile)
    {
        byte[] imageBytes = new byte[fileUploadPhoto.PostedFile.InputStream.Length + 1];
        fileUploadPhoto.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length);
    }

    Label1.Text = Convert.ToString(a.sell_item(Convert.ToString(TextBoxName.Text), imageBytes, Convert.ToString(TextBoxDescription.Text)));

    Label1.Visible = true;
    if (Label1.Visible == true)
    {
        MessageBox.Show("Item has been uploaded successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
        Response.Redirect("Menu page.aspx");
    }
}

また、バイト配列を取得するように写真パラメーターを更新する必要があります。

[WebMethod(EnableSession = true)]
public string sell_item(string name, byte[] photo, string description)
{
    ...
}

表示に関しては、画像を処理するために汎用ハンドラー (.ashx) を使用しました。

public class ImageHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        //Retrieve the image using whatever method and identifier you used
        byte[] imageData = get_item(context.Request["ID"]);

        if (imageData.Count > 0)
        {
            context.Response.OutputStream.Write(imageData, 0, imageData.Length);
            context.Response.ContentType = "image/JPEG";
        }
    }
}

表示するには、データソースをバインドする場合、グリッドビューに画像を配置できます。

<ItemTemplate>
    <asp:Image ID="Image1" runat="server"
        ImageUrl='<%# "ImageHandler.ashx?ID=" + Eval("ID")%>'/>
</ItemTemplate>

または、jQuery に精通している場合は、プレースホルダー イメージ ソースを次のように設定できます。

<img id="Image1" />

<script type="text/javascript">
    $("#Image1").attr("src", "ImageHandler.ashx?ID=" + identifier);
</script>

また、さまざまな記事に詳細情報があります。

http://csharpdotnetfreak.blogspot.com/2009/07/display-images-gridview-from-database.html

于 2013-01-24T17:07:34.230 に答える
0

画像をデータベースに直接保存することはお勧めしませんが、ファイルシステムに保存してリンクのみを保存することをお勧めします。それ以外の場合は、SQLServer 2008 で FILESTREAM 属性を使用します。小さな画像の場合は、varbinary 型を使用します。

于 2013-01-24T18:34:23.173 に答える