无法在数据库 SQL Server 2005 中检索或存储图像

问题描述 投票:0回答:3

我正在尝试从 ASP.Net 后端检索图像。使用SQL SERVER 2005作为后端。我已经尝试了许多代码,包括在线可用的代码。谁能指导我解决这个问题。

我的代码如下

桌子设计:-

create table Image
 (
ImageId Int identity (1,1),ImageName Varchar(50), Image image   
)

代码:-

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridData();
        }
    }
    string strcon = "Data Source=SUJITHA\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            //getting length of uploaded file
            int length = FileUpload1.PostedFile.ContentLength;
            //create a byte array to store the binary image data
            byte[] imgbyte = new byte[length];
            //store the currently selected file in memeory
            HttpPostedFile img = FileUpload1.PostedFile;
            //set the binary data
            img.InputStream.Read(imgbyte, 0, length);
            string imagename =TextBox1.Text;
            //use the web.config to store the connection string
            SqlConnection connection = new SqlConnection(strcon);
            connection.Open();
            SqlCommand cmd = new SqlCommand("INSERT INTO Image (ImageName,Image) VALUES (@imagename,@imagedata)", connection);
            cmd.Parameters.Add("@imagename", SqlDbType.VarChar, 50).Value = imagename;
            cmd.Parameters.Add("@imagedata", SqlDbType.Image).Value = imgbyte;
            int count = cmd.ExecuteNonQuery();
            connection.Close();
            if (count == 1)
            {
                BindGridData();
                TextBox1.Text = string.Empty;
                ScriptManager.RegisterStartupScript(this, this.GetType(), "alertmessage", "javascript:alert('" + imagename + " image inserted successfully')", true);
            }
        }
    }

    private void BindGridData()
    {
        SqlConnection connection = new SqlConnection(strcon);
        SqlCommand command = new SqlCommand("SELECT ImageName,Image  from [Image]", connection);
        SqlDataAdapter daimages = new SqlDataAdapter(command);
        DataTable dt = new DataTable();
        daimages.Fill(dt);
       GridView1.DataSource = dt;
       GridView1.DataBind();
       GridView1.Attributes.Add("bordercolor", "black");
    }
c# asp.net sql-server-2005
3个回答
1
投票
SqlConnection con = new SqlConnection(@"Data Source=AMAR-PC\SQLEXPRESS;Initial Catalog=a;User ID=sa;Password=amar");
string path = Server.MapPath("Images/");

if (FileUpload1.HasFile)
{
    byte[] img = new byte[FileUpload1.PostedFile.ContentLength];
    HttpPostedFile myimage = FileUpload1.PostedFile;
    myimage.InputStream.Read(img, 0, FileUpload1.PostedFile.ContentLength);
    SqlCommand cmd = new SqlCommand("insert into images values ('" + TextBox1.Text + "','" + FileUpload1.PostedFile + "')", con);

    con.Open();

这就是我所做的......而且我也知道还有很多其他方式上传文件...... 现在我希望上传的图片应该显示在图像控制中......你现在能帮我吗


0
投票
    */Your code Like this*         

    **//Insert the file into database**

            string strQuery = "insert into tblFiles(Name, ContentType, Data) values (@Name, @ContentType, @Data)";

            SqlCommand cmd = new SqlCommand(strQuery);

            cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename;

            cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value = "application/vnd.ms-word";

            cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes;

            InsertUpdateData(cmd);

    **//Select the file from database**
        string strQuery = "select Name, ContentType, Data from tblFiles where id=@id";

        SqlCommand cmd = new SqlCommand(strQuery);

        cmd.Parameters.Add("@id", SqlDbType.Int).Value = 1;

        DataTable dt = GetData(cmd);

        if (dt != null)

        {

            download(dt);

        }

        private void download (DataTable dt)

        {

            Byte[] bytes = (Byte[])dt.Rows[0]["Data"];

            Response.Buffer = true;

            Response.Charset = "";

            Response.Cache.SetCacheability(HttpCacheability.NoCache);

            Response.ContentType = dt.Rows[0]["ContentType"].ToString();

            Response.AddHeader("content-disposition", "attachment;filename="

            + dt.Rows[0]["Name"].ToString());

            Response.BinaryWrite(bytes);

            Response.Flush();

            Response.End();

        }
private DataTable GetData(SqlCommand cmd)
    {
        DataTable dt = new DataTable();
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
        SqlConnection con = new SqlConnection(strConnString);
        SqlDataAdapter sda = new SqlDataAdapter();
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;
        try
        {
            con.Open();
            sda.SelectCommand = cmd;
            sda.Fill(dt);
            return dt;
        }
        catch 
        {
            return null;
        }
        finally
        {
            con.Close();
            sda.Dispose();
            con.Dispose();
        }
    }

0
投票

有几件事让我担心

  • 您使用

    master
    数据库

  • 你的表名是

    image
    ,它是 SQL Server 中的保留字

如果需要用保留名来命名表,则需要用方括号括起来:

INSERT INTO [Image] ...

© www.soinside.com 2019 - 2024. All rights reserved.