C#中图片存入数据库和从数据库取出图片遇到的问题

目录

1.前言

2.操作数类型冲突: nvarchar 与 image 不兼容

问题描述

问题出现原因

解决方案

3.C#中参数化查询 '(@PERSONAL_PHOTO image,@SURNAME nvarchar(4000),@MIN_NAME nvarcha' 需要参数 '@PASSPORT',但未提供该参数。

问题描述

出现问题原因

解决方案

4.在从数据库获取图片数据时,遇到了如何判断获取的图片数据是否为null的问题

问题描述

参考

每天给自己打个气,come on!


1.前言

近期在做一个基于MVC框架的C#项目,遇到了web端要将用户信息传输到后台保存的数据库并从数据中获取再回显到web端界面中,信息中包含图片,在处理过程中遇到一些问题,在此记录一下

2.操作数类型冲突: nvarchar 与 image 不兼容

问题描述

在提交前端信息时,有图片没有上传,在往数据库写入时出现该问题,数据库中图片类型时image。

问题出现原因

数据库如果是Image类型,当执行插入语句时,如果插入的值是DBNull.Value时提示:操作数类型冲突: nvarchar 与 image 不兼容;出现这个问题的原因是没有指定DbType的原因。大部分情况下,使用 SqlParameter的时候不需要指定参数的数据类型(DbType或者SqlDbType),ADO.Net会根据value的类型来自动判断出数 据类型,即使ADO.Net不能判断出来,SQLServer数据库服务器也能进行大部分的判断(当然会损失一些性能)。
但是对于这个程序中的Image类型就没那么幸运了,如果不指定DbType,而恰好数据又为Null/DbNull的时候,ado.net就把数据类型识别成为了nvarchar,就出现了上面的错误了。因此只要指定DbType或者SqlDbType即可。

解决方案

new SqlParameter("@Photo", SqlDbType.Image) {Value=recruitment.PASSPORT}

3.C#中参数化查询 '(@PERSONAL_PHOTO image,@SURNAME nvarchar(4000),@MIN_NAME nvarcha' 需要参数 '@PASSPORT',但未提供该参数。

问题描述

在解决了上一个问题后又出现新的问题,图片依旧没有上传,因此recruitment.PASSPORT=null

出现问题原因

直接将C#中的null认为成sql中的null,所以被认为没有提供该参数

解决方案

C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就 是DBNull.Value

new SqlParameter("@Photo", SqlDbType.Image) {Value= TableSqlCon.TODBNull(recruitment.PASSPORT)}

 public static object TODBNull(byte[] image)
        {
            if (image != null)
            {
                return image;
            }
            else
            {
                return DBNull.Value;
            }
        }

4.在从数据库获取图片数据时,遇到了如何判断获取的图片数据是否为null的问题

问题描述

从数据获取的图片数据会被强制转换成byte[]类型,如:recruitment.PASSPORT =(byte[]) dt.Rows[0][21];但是当图片为空时,报错:无法将System.DBNull转为byte[],然后就自己尝试去判断其是否为空,if(dt.Rows[0][21]!=null)等几种尝试,均失败

解决方案

 正确写法:if (dt.Rows[0][21] is System.DBNull)

 if (dt.Rows[0][21] is System.DBNull)
                    {
                        recruitment.PASSPORT = null;
                    }
                    else
                    {
                        recruitment.PASSPORT =(byte[]) dt.Rows[0][21];
                    }

参考

https://blog.csdn.net/weixin_30675967/article/details/99175174?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1

https://blog.csdn.net/kaixin_5200_kaixin/article/details/23115953

https://blog.csdn.net/weixin_30270889/article/details/97839671

每天给自己打个气,come on!

发布了30 篇原创文章 · 获赞 1 · 访问量 1158

猜你喜欢

转载自blog.csdn.net/chunchunlaila/article/details/105353856