2011-04-30 3 views
0

Я хотел проверить хранения изображений в базе данных, так что я сделал поиск Google и нашел этот код:Сохранение изображений внутри базы данных с помощью asp.net C#

.cs файл:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Drawing; 
using System.Data.SqlClient; 
using System.IO; 
using System.Data; 


public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    string strImageName = Path.GetFileName(FileUploadControl.FileName); 
    FileUploadControl.SaveAs(Server.MapPath("~/") + strImageName); 


    Bitmap bNewImage = new Bitmap(strImageName); 
    FileStream fs = new FileStream(strImageName, FileMode.Open, FileAccess.Read); 

    //creating byte array to read image 

    byte[] bImage = new byte[fs.Length]; 


    fs.Read(bImage, 0, Convert.ToInt32(fs.Length)); 

    fs.Close(); 
    fs = null; 



    string connstr = "Server=WINSP3UE\\SqlExpress;Database=ImageStore;Trusted_Connection=True;"; 
    SqlConnection conn = new SqlConnection(connstr); 
    conn.Open(); 
    string strQuery; 

    strQuery = "insert into [dbo].[ImageStore](id,[ImageContent]) values(" + "1," + " @pic)";//"INSERT INTO ImageStore (ID, ImageContent) values (" + "1," + " @pic)"; 

    SqlParameter ImageParameter= new SqlParameter(); 
    ImageParameter.SqlDbType = SqlDbType.Image; 
    ImageParameter.ParameterName = "pic"; 
    ImageParameter.Value = bImage; 



    SqlCommand cmd = new SqlCommand(strQuery, conn); 
    cmd.Parameters.Add(ImageParameter); 
    cmd.ExecuteNonQuery(); 
    Response.Write("Image has been added to database successfully"); 



    cmd.Dispose(); 
    conn.Close(); 
    conn.Dispose(); 


} 

}

.aspx файл

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:FileUpload id="FileUploadControl" runat="server" /> 
    <asp:Button ID="Button1" runat="server" Text="Upload" /> 
</div> 
</form> 

Он должен работать, но это не так, и я имею в виду, что он не обновляет базу данных, значения в таблицах остаются пустыми. И сообщение «Изображение загружено в базу данных успешно» также не отображается. База данных, которую я использую, имеет одну таблицу с именем ImageStore с двумя атрибутами, ID и ImageContent.

Я новичок в asp.net и C#, может ли кто-нибудь проверить код на наличие каких-либо ошибок?

+0

Ваше имя параметра должно быть @pic вместо pic. И, как и другие, вы должны запустить его через отладчик. Есть так много вещей, которые могут пойти не так. Какое сообщение об ошибке вы получаете btw? –

ответ

0

Предлагаю вам посмотреть на свой код в отладчике. Слишком много, что может пойти не так, как случайное предположение, чтобы иметь смысл.

+0

Спасибо за ответ, да, я сделаю это, желаю мне удачи! :) – QPTR

0

ImageParameter.ParameterName = "pic";

ImageParameter.ParameterName = "@pic"; 
+0

Спасибо, что ответили! – QPTR

1

Прежде всего вы ImageID жестко закодировано в операторе вставки, которая не очень хорошо: Во-первых, если ID установлен в столбце идентификаторов автоматическое приращение, то будет сгенерировано исключение, если вы установите вставку идентификации в этой таблице on, если он не настроен на автоматическое увеличение, вы получите дубликаты идентификаторов, что в конечном итоге приведет к нарушению первичного ключа. Скорее, оставьте вставку ID и просто выполните вставку содержимого. Что касается параметров, то igonre объявляет параметр, удаляя все из определения strQuery в создание cmd. Вместо этого используйте это:

strQuery = "insert into [dbo].[ImageStore]([ImageContent]) values(@pic)"; 

SqlCommand cmd = new SqlCommand(strQuery, conn); 
cmd.Parameters.AddWithValue("pic", bImage); 

if(cmd.ExecuteNonQuery()>0) 
    Response.Write("Image has been added to database successfully"); 
+0

Большое спасибо за ответ. Я пробовал это, но все та же проблема, я попробую отладить его, еще раз спасибо! – QPTR

Смежные вопросы