从 C# 应用程序检索 sql 图像时出错
Posted
技术标签:
【中文标题】从 C# 应用程序检索 sql 图像时出错【英文标题】:Getting error retrieving sql image from c# application 【发布时间】:2019-09-24 01:27:09 【问题描述】:我在尝试加载和显示图像表时遇到错误:
data:image/jpg;base64,U3lzdGVtLkJ5dGVbXQ== '由于错误无法加载图像'
我的 SQL DB 有一个 FileName(nvarhcar) Content(image) 和 ContentType (nvarchar)
希望有人可以帮助我了解图像未显示的原因。谢谢
更新 c# 以加载图像
protected void Page_Load(object sender, EventArgs e)
if (Session["User"] == null)
Response.Redirect("../Login.aspx");
sqlcon.Open();
SqlCommand cmd = sqlcon.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM BluePrints";
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
gvImages.DataSource = dt;
gvImages.DataBind();
sqlcon.Close();
protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.DataRow)
DataRowView dr = (DataRowView)e.Row.DataItem;
string imageUrl = "data:image/jpg;base64," +
Convert.ToBase64String((byte[])dr["Content"]);
(e.Row.FindControl("Image1") as Image).ImageUrl = imageUrl;
<asp:GridView ID="gvImages" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound" Height="192px" Width="915px">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" />
<asp:BoundField DataField="FileName" HeaderText="Name" />
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<div id="dialog" style="display: none">
</div>
<br />
<br />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/themes/start/jquery-ui.css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery-
ui.min.js"></script>
<script type="text/javascript">
$(function()
$("#dialog").dialog(
autoOpen: false,
modal: true,
height: 600,
width: 600,
title: "Zoomed Image"
);
$("[id*=gvImages] img").click(function()
$('#dialog').html('');
$('#dialog').append($(this).clone());
$('#dialog').dialog('open');
);
);
</script>
</asp:Content>
插入代码
protected void UploadButton_Click(object sender, EventArgs e)
FileInfo fi = new FileInfo(FileUploadControl.FileName);
byte[] documentContent = FileUploadControl.FileBytes;
string name = fi.Name;
if (FileUploadControl.HasFile)
try
if (FileUploadControl.PostedFile.ContentType == "image/jpeg")
if (FileUploadControl.PostedFile.ContentLength < 102400)
StatusLabel.Text = "Upload status: File uploaded!";
using (SqlConnection sqlcon = new SqlConnection(con))
sqlcon.Open();
SqlCommand cmd = sqlcon.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO BluePrints (ID_Dev, PlotID, FileName, Content) VALUES (' " + DropDownList1.SelectedValue + " ', '" + DropDownList2.SelectedValue + "', '" + name + "', '" + documentContent + "')";
cmd.ExecuteNonQuery();
else
StatusLabel.Text = "Upload status: The file has to be less than 100 kb!";
else
StatusLabel.Text = "Upload status: Only JPEG files are accepted!";
catch (Exception ex)
StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
【问题讨论】:
错误是什么? ''data:image/jpg;base64,U3lzdGVtLkJ5dGVbXQ=='' 无法显示,因为它包含错误。 当我加载页面时,有一个小图像图标,当我右键单击并在另一个选项卡中查看时,我会在黑色背景上收到它。 尝试使用正确的内容类型:image/jpeg
。参见例如here...
刚刚尝试过,得到同样的错误,但只是 jpeg 而不是 jpg
【参考方案1】:
问题是U3lzdGVtLkJ5dGVbXQ==
解码是System.Byte[]
而不是任何应该是图像的东西。
换句话说,显示数据的代码可能没问题。相反,您在数据库中的数据是无效的。它应该是实际的字节数组,而不是表示它是字节数组的字符串。
【讨论】:
我添加了插入代码,你能帮我看看吗 代码不正确且不安全。您应该始终使用parametrized queries。byte[]
参数应该像this 一样添加。以上是关于从 C# 应用程序检索 sql 图像时出错的主要内容,如果未能解决你的问题,请参考以下文章
错误 java.sql.SQLException:从数据库中检索 Blob(图像)时 SQLite JDBC 驱动程序未实现
在 Nativescript App 中调整从 URL 接收到的图像大小时出错