为什么我保存图片(二进制)到数据库后,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(); }
command.Parameters.Add("@FingerInfo", SqlDbType.Image).Value = fingerCode;
command.Parameters.Add("@jfingeimage", SqlDbType.VarChar).Value = imgContent;
这两行代码的SqlDbType搞反了吧...
反啦? 没有啊 我现在新建了个页面 只改 IMAGE类型的这个数据也不行,还是空
貌似是图片太大了 我传了个1K的图就成功了, 但是怎么只能存这么小的图?哪里有问题? 那位大虾指点下好么
@bdf216:
不清楚哦,没存过图片,一般只存图片路径。。
需求限制的 我也想存路径 都是被逼的啊
不知道是不是你的数据库中定义字段的的大小关系
楼上说的没错,检查一下数据库中字段的大小,如果是太小会存空的
FingerInfo和jfingeimage这两个字段是IMAGE类型的
汗.... 我传了个1k、2k的图片都成功了
image类型不是最长存储2G么,我这个图片才60多K怎么就传不了
因为把一个图片变成二进制流之后,他的大小就不是你所看到的那个大小了而是二进制流的大小
@王凌志: 嗯 但是IMAGE 不是最大存储2G么,转换成字节是21.47483648亿 , 我这个图片才7万多字节,怎么就存不了呢?