首页 新闻 会员 周边

将图片保存到SQL数据库中

0
悬赏园豆:20 [已关闭问题] 关闭于 2013-09-03 11:43

 为什么我保存图片(二进制)到数据库后,image类型的字段值为空?

表结构:

FingerInfo image

jfingeimage  image

JstudID varchar(10)

获取前台上传控件中的图片,

        int imgSize;//获取图片的大小
        string imgType;//获取图片的格式。
        StringBuilder stbFP = new StringBuilder();
        Stream imgStream;//获取了一个InputStream流
        imgSize = uploadfile1.PostedFile.ContentLength;
        imgType = uploadfile1.PostedFile.ContentType;
        imgStream = uploadfile1.PostedFile.InputStream;

        byte[] imgContent = new byte[imgSize];
        imgStream.Read(imgContent, 0, imgSize);
        imgStream.Close();

 byte[]的长度为:74806

执行存储过程

 //创建一个SqlConnection对象 
        string strCon = ConfigurationManager.ConnectionStrings["datasource"].ToString();
        SqlConnection myConn = new SqlConnection(strCon);
        myConn.Open();
        SqlCommand command = new SqlCommand();
        command.Connection = myConn;

        command.CommandText = "proc_StuFingerPrint";
        command.CommandType = CommandType.StoredProcedure;

        command.Parameters.Add("@FingerInfo", SqlDbType.Image).Value = fingerCode;
        command.Parameters.Add("@jfingeimage", SqlDbType.VarChar).Value = imgContent; // imageBytes; //
        command.Parameters.Add("@JstudID", SqlDbType.VarChar).Value = JstudID;
        //command.Parameters.Add("@FingerNum", SqlDbType.VarChar).Value = FingerNum;

        command.ExecuteNonQuery();

        myConn.Close();

 执行后,并没有报错。但是到数据库中查看后,我发现 jfingeimage 这个image类型的字段为空。别的字段可以修改,谁知道是为什么?

  

问题补充:

//我现在单独做了个页面 只修改‘Jfingeinfo_byte ’这一个字段 还是为空值

//Jfingeinfo_byte 为 Image 字段 

//获取上传图片的内容byte[] 
        //string imgFilePath = Server.MapPath(fingerImg); //服务器上图片路径
        FileStream fs = new FileStream(@"C:\fingerPrint\jcardfingerum.bmp", FileMode.Open, FileAccess.Read); 
        Byte[] btye2 = new byte[fs.Length];
        fs.Read(btye2, 0, Convert.ToInt32(fs.Length));
        fs.Close();

        using (SqlConnection conn = new SqlConnection(sqlconnstr))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            string sql = "update Jstud set Jfingeinfo_byte = @jfingeimage where id=2";
            cmd.CommandText = sql;  
            SqlParameter par = new SqlParameter("@jfingeimage", SqlDbType.Image);
            par.Value = btye2;
            cmd.Parameters.Add(par); 
            //
            int t = (int)(cmd.ExecuteNonQuery());
            if (t > 0)
            {
                txt1.Value = "插入成功!";
            }
            conn.Close();
        }
bdf216的主页 bdf216 | 初学一级 | 园豆:170
提问于:2012-08-20 18:30
< >
分享
所有回答(4)
0
command.Parameters.Add("@FingerInfo", SqlDbType.Image).Value = fingerCode;
command.Parameters.Add("@jfingeimage", SqlDbType.VarChar).Value = imgContent;
这两行代码的SqlDbType搞反了吧...
向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-20 19:07

反啦?  没有啊 我现在新建了个页面 只改 IMAGE类型的这个数据也不行,还是空

支持(0) 反对(0) bdf216 | 园豆:170 (初学一级) | 2012-08-20 21:05

貌似是图片太大了 我传了个1K的图就成功了, 但是怎么只能存这么小的图?哪里有问题? 那位大虾指点下好么

支持(0) 反对(0) bdf216 | 园豆:170 (初学一级) | 2012-08-20 22:18

@bdf216: 

不清楚哦,没存过图片,一般只存图片路径。。

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-20 22:56

 需求限制的 我也想存路径 都是被逼的啊

支持(0) 反对(0) bdf216 | 园豆:170 (初学一级) | 2012-08-21 11:00
0

不知道是不是你的数据库中定义字段的的大小关系

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-21 06:17
0

楼上说的没错,检查一下数据库中字段的大小,如果是太小会存空的

jason2013 | 园豆:1998 (小虾三级) | 2012-08-21 09:13

FingerInfo和jfingeimage这两个字段是IMAGE类型的 

支持(0) 反对(0) bdf216 | 园豆:170 (初学一级) | 2012-08-21 10:51
0

汗.... 我传了个1k、2k的图片都成功了

image类型不是最长存储2G么,我这个图片才60多K怎么就传不了

bdf216 | 园豆:170 (初学一级) | 2012-08-21 10:57

因为把一个图片变成二进制流之后,他的大小就不是你所看到的那个大小了而是二进制流的大小

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-22 08:54

@王凌志: 嗯 但是IMAGE 不是最大存储2G么,转换成字节是21.47483648亿 , 我这个图片才7万多字节,怎么就存不了呢?

支持(0) 反对(0) bdf216 | 园豆:170 (初学一级) | 2012-08-22 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册