我在将图像保存到数据库时遇到问题。 我不知道如何将图像插入或存储到我的数据库中并显示在我的gridview中。
这是我的桌子设计:
在我的网络方法中:
[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");
}
}
在我的gridview中,我设置了属性:
图像不会显示在gridview中。 我还是c#的新手。有人可以帮帮我吗?感谢。
答案 0 :(得分:1)
您可能需要查看this article有关如何将图像保存到数据库的信息。有关您尝试保存图像的数据库/列类型的更多信息也会有所帮助。也许是gridview的代码。
编辑: This post has some helpful code on storing in an image column.
答案 1 :(得分: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";
}
}
}
为了显示,如果绑定数据源,可以将图像放在gridview中:
<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
答案 2 :(得分:0)
我不建议将图像直接存储在数据库中,而是将它们存储在文件系统中,只保存链接。 否则,使用SQLServer 2008使用FILESTREAM属性。对于小图像,请使用varbinary类型。