bug存儲
先在本地裝了個Mysql,又裝了個navicat管理工具,又新建了個工程來測試:
簡單的測試方法,就是放一個按鈕,點擊一下,讀取遠程圖片,然後存到資料庫,再讀取出來顯示到界面上。
管理工具隨意建了個表“D1”,弄了三個id,img,name三個欄位。
示例代碼如下,因為測試,代碼就沒寫的太規范:
protected
void
btnTest_Click(object
sender,
EventArgs
e)
{
string
url
=
"http://www..com/img/_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有問題,為此,在編寫進行多資料庫支持的框架時,總會時不時的遇到好多問題,別糾結,始終要解決。
『貳』 iPhone6存儲空間顯示錯誤
iPhone6存儲空間顯示錯誤:可能是系統版本BUG問題。
建議恢復系統版本以修復BUG問題。
操作為:
第一步:電腦登陸蘋果官網下載itunes軟體,安裝完畢後打開。
第二步:用數據線把iphone6與電腦連接。
第三步:在摘要界面,點擊「恢復iphone」,按照itunes指示操作恢復系統版本即可。