#c# #sql-server
#c# #sql-сервер
Вопрос:
Я сохранил изображения в своей таблице sql, но когда я отображаю их с помощью asp.net Обработчик изображений некоторые изображения повреждены, они сохраняются в этом формате 0x53797374656d2e427974655b5d
. Я хочу знать, могу ли я преобразовать их в изображение, чтобы я мог их отображать.
Код обработчика:
public class ImageHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string id = context.Request.QueryString["id"].ToString();
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ToString());
con.Open();
SqlCommand objCmd = new SqlCommand("select Image from table where xyz=@xyz", con);
objCmd.CommandType = System.Data.CommandType.Text;
objCmd.Parameters.AddWithValue("@xyz", id.ToString());
object data = objCmd.ExecuteScalar();
con.Close();
objCmd.Dispose();
if(data == null)
{
}
context.Response.BinaryWrite((byte[])data);
}
public bool IsReusable {
get {
return false;
}
}
}
На странице aspx:
<asp:Image ID="img" runat="server" ImageUrl='<%# "ImageHandler.ashx?ID=" Eval("xyz")%>'
alt="Image broken"/>
Пожалуйста, дайте мне знать, есть ли какой-либо способ преобразовать эти изображения в их исходный формат.
Комментарии:
1.Можем ли мы уже прекратить использовать AddWithValue() ? Это зло.
2. В каком смысле сломан? Что происходит на самом деле? Кроме того, вы, похоже, не устанавливаете тип содержимого в ответе.
3. Если вы обратитесь к таблице ASCII с шестнадцатеричным столбцом, вы увидите, что ваши «байты изображения»,
0x53797374656d2e427974655b5d
, преобразуются вSystem.Byte[]
. Похоже, вы потеряли исходные данные изображения при попытке сохранить их в базе данных.4. Это означает, что он не может быть преобразован в исходное изображение…