注册 登录
编程论坛 ASP.NET技术论坛

怎么实现上传图片到数据库?(sql)

meteor86 发布于 2008-04-16 11:01, 2657 次点击
怎么实现上传图片到数据库呢?
要用FileUpLoad控件吗?

我在网上查的,好象首先要设置enctype,      enctype是什么?在哪里?      
请教了.
8 回复
#2
shezhenhui19892008-04-16 11:54
private void UploadFile()
 {
 
    string strFilePathName = loFile.PostedFile.FileName;
    string strFileName = Path.GetFileName(strFilePathName);
    int FileLength = loFile.PostedFile.ContentLength;

    if(FileLength<=0)
        return;

   try
    {
        
        Byte[] FileByteArray = new Byte[FileLength];

        Stream StreamObject = loFile.PostedFile.InputStream;

       StreamObject.Read(FileByteArray,0,FileLength);

        string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
        SqlConnection Con = new SqlConnection(strCon);
        String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
        SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
        CmdObj.Parameters.Add("@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;
        CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar,50).Value = loFile.PostedFile.ContentType;        

        CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = tbDescription.Text;
        
        CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = FileLength;
        Con.Open();
        CmdObj.ExecuteNonQuery();
        Con.Close();

        Response.Redirect("ShowAll.aspx");
    }
    catch(Exception ex)
    {
        throw ex;
    }
}
#3
hebingbing2008-04-16 12:04
你是要将图片以二进制的方式存到数据库吗还是光放其路径……
enctype是来设置MIME编码格式的……
#4
meteor862008-04-16 12:34
要将图片以二进制的方式存到数据库的.
#5
hebingbing2008-04-16 13:01
2楼给的代码就可以实现……
在aspx页面首先设置:
<FORM ENCTYPE="multipart/form-data" RUNAT="server" ID="Form1">//enctype是来设置MIME编码格式以使可以上传图片……
我给你解释一下他的代码吧……
private void UploadFile()
{

    string strFilePathName = loFile.PostedFile.FileName;  //获取完整的路径
    string strFileName = Path.GetFileName(strFilePathName);//获取图片的名称
    int FileLength = loFile.PostedFile.ContentLength;//获取图片的大小

    if(FileLength<=0)//判断是否有图片
        return;

   try
    {
        
        Byte[] FileByteArray = new Byte[FileLength];//用图片的长度来初始化一个字节数组存储临时的图片文件

        Stream StreamObject = loFile.PostedFile.InputStream; //建立文件流对象


       StreamObject.Read(FileByteArray,0,FileLength);// 读取图片数据到临时存储体FileByteArray,0为数据指针位置,fileLength为数据长度


        string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
        SqlConnection Con = new SqlConnection(strCon);
        String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
        SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
        CmdObj.Parameters.Add("@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;//将二进制的图片赋值给@Image
        CmdObj.Parameters.Add("@ContentType", SqlDbType.VarChar,50).Value = loFile.PostedFile.ContentType; //记录图片类型      

        CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = tbDescription.Text;//其他的一些表单元素,比如说明等的东东
        
        CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = FileLength;//记录图片长度,读取数据的时候会用到的

        Con.Open();
        CmdObj.ExecuteNonQuery(); //执行Sqlcommand
        Con.Close();//关闭链接

        Response.Redirect("ShowAll.aspx");//跳转页面
    }
    catch(Exception ex)//抛出异常
    {
        throw ex;
    }
}
#6
meteor862008-04-16 13:51
我只会用FileUpLoad控件,将图片上传到一个文件夹,不知道怎么上传到数据库.呵呵
#7
meteor862008-04-16 13:55
上面所写的  loFile  是  FileUpLoad控件 的 ID 吗?
#8
meteor862008-04-16 14:09
Stream,     StreamObject,需要加什么头文件吗?
错误  找不到类型或命名空间名称“Stream”(是否缺少 using 指令或程序集引用?)
#9
hebingbing2008-04-16 16:24
对,就是Fileupload的id

using
1