MySqlBlob图片类型存储Bug解决:索引超出了数组界限错误_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySqlBlob图片类型存储Bug解决:索引超出了数组界限错误_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3486字,纯文字阅读大概需要5分钟。
内容图文
告别了一周多的网络,终于回归,突见群里,有网友提了以下问题:CYQ.Data框架测试:mysql数据库测试(保存blob类型的数据会出问题) ,针对mysql数据库做测试:发现更新blog字段,总是保存System.Byte[]
既然网友提出了问题,本地再试验一下:
先在本地装了个Mysql,又装了个navicat管理工具,又新建了个工程来测试:简单的测试方法,就是放一个按钮,点击一下,读取远程图片,然后存到数据库,再读取出来显示到界面上。
管理工具随意建了个表“D1”,弄了三个id,img,name三个字段。
示例代码如下,因为测试,代码就没写的太规范:
protected void btnTest_Click( object sender, EventArgs e){
string url = " http://www.baidu.com/img/baidu_jgylogo3.gif ";
bool result = false;
int id = 0;
string conn = " host=127.0.0.1;Port=3306;Database=test;uid=root;pwd=123456 ";
// string conn = "server=.;database=demo;uid=sa;pwd=123456";
using (MAction action = new MAction( " d1 ", conn))
{
WebClient wc = new WebClient();
try
{
// if (action.Fill(2))
// {
byte[] data = wc.DownloadData(url);
action.Set( " img ", data);
action.Set( " name ", " ldf ");
result = action.Insert(InsertOp.ID);
id = action.Get< int>( " id ");
// }
}
catch (Exception err)
{
Log.WriteLogToTxt(err);
}
}
if (result) // 再开一个读取试试
{
using (MAction action = new MAction( " d1 ", conn))
{
if (action.Fill(id))
{
Response.BinaryWrite(action.Get< byte[]>( " img "));
}
}
}
}
解决与调试经过:
经本地测试,调试,发现对blob类型的参数赋值时,抛出异常:索引超出了数组界限。异常太迷惑,网上搜了一下,有人说是:Mysql.dll的版本问题,花了一个csdn积分下了一个6. 2.3版本,还是不顶用。
然后无意识的进行调试,估计运气问题,竟然让我发现了问题所在,只能说是运气好。
看一段小代码,对参数的赋值,参数多数据库支持时,类似这种写法:
DbParameter para = _fac.CreateParameter();//通过工厂广告获得当前数据库类型的参数 para.ParameterName = parameterName; para.Value = value == null ? DBNull.Value : value; para.DbType = dbType;if (size > -1)//设定长度。 { para.Size = size; } para.Direction = direction;
这代码其实很简单:
产生了一个参数,然后赋参数名,参数值,参数类型,参数大小和参数指向。而Mysql竟然在对参数Size赋值的问题处理上有些Bug。
当我调试跳过对para.Size赋值时,竟然正常了。
于是代码改成了这样:
if (dbType != DbType.Binary && size > - 1) // mysql不能设定长度,否则会报索引超出了数组界限错误。然后我测试了下其它数据库,发现指定size是正常的,最后得出一结论:
经过测试,其它数据库类型对Size的赋值是正常的,唯Mysql有问题,为此,在编写进行多数据库支持的框架时,总会时不时的遇到好多问题,别纠结,始终要解决。
内容总结
以上是互联网集市为您收集整理的MySqlBlob图片类型存储Bug解决:索引超出了数组界限错误_MySQL全部内容,希望文章能够帮你解决MySqlBlob图片类型存储Bug解决:索引超出了数组界限错误_MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。