2011-04-30 54 views
0

我想测试一个数据库存储图像,所以我做了谷歌搜索,发现这个代码:数据库中存储的图像在C#中使用asp.net

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? – 2011-04-30 02:37:40

回答

0

我建议你在调试器中查看你的代码。有太多可能会出错的随机猜测是有道理的。

+0

感谢您的回复,是的,我会这样做,祝我好运! :) – QPTR 2011-05-01 06:59:02

0

ImageParameter.ParameterName =“pic”;

ImageParameter.ParameterName = "@pic"; 
+0

感谢您的回复! – QPTR 2011-05-01 06:55:24

1

你图像标识的首先是在INSERT语句这是不好的硬编码的:首先,如果ID设置为自动递增标识列,它会除非你在该表上设置标识插入抛出一个异常如果它没有设置为自动增量,则会得到重复的ID,这最终会导致主键违例。相反,省略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 2011-05-01 06:54:28

相关问题