两个层面
第一是C#里面的Datagridview 里面的blog 的获取和更新,第二是 MySQL数据库的更新。
情景简单介绍一下
数据库有一列数据是blob,要把它显示出来,当然是显示原始数据,即16进制数据,然后修改更新。
界面如下
注意:ABAB是16进制数不是字符串‘ABAB’,希望你能理解。换言之,里面的字母最大到F,不能出现其他比F更大的字母了。
看显示代码的关键语句:
...
Type tp = dgv.Rows[row].Cells[colName].Value.GetType();
string colVal = dgv.Rows[row].Cells[colName].Value.ToString();
if (tp.Name == "Byte[]")// dgv 里面保存的是blob
{
//转换显示出来
Byte[] dat = (Byte[])dgv.Rows[row].Cells[colName].Value;
colVal = "";
foreach (byte bt in dat)
{
colVal += bt.ToString("X2");
}
}
ctrl.Text = colVal;
...
相反的过程,更新DGV的代码
if (IsBlobCtrl(ctrl) )//自己写的函数,可以忽略
{
string Val = ctrl.Text;
Byte[] byteArr = new Byte[Val.Length / 2];
for (int i = 0; i < Val.Length; i += 2)
{
byteArr[i / 2] = Convert.ToByte(Val.Substring(i, 2), 16);
}
dr[fieldName] = byteArr;
continue;
}
更新mysql的语句比较简单
关键语句如下:
string Val = ctrl.Text;//注意是16进制字串
setFields += fieldName + "=unhex('" + Val + "'),\r\n";
说明:Hex()和Unhex函数的功能在新版本中和以前似乎不同,因为本人验证了网友的各种代码,结果都不对。他们的例子似乎是5.x以前的代码。
马拉孙 2021-09-11 于泛五地区