C#NET开发Winform使用MySQL数据库 无法将“System.Byte[]”的对象强制转换为类型“System.IConvertible”,该怎么处理
C#.NET开发Winform使用MySQL数据库 无法将“System.Byte[]”的对象强制转换为类型“System.IConvertible”
C#.NET 3.5开发winform程序,后台使用的是MySQL 5.1.x 数据库
从MySQL官网下的 mysql-connector-net-6.5.4,安装后在.NET里使用正常,使用MySqlConnection,MySqlCommand操作的数据库,自己写了一个MySqlHelper.cs,里面有一个执行MySqlCommand的方法用于更新数据
数据库的pic表中有一个longblob字段pic_data,存储图片数据
现在在程序中获得了图片的路径path,下面的程序执行后,会在MySqlExcute方法中的ExecuteNonQuery那句话上报错
无法将“System.Byte[]”的对象强制转换为类型“System.IConvertible”
查了很多貌似没有遇到我这种情况的,想请大家帮忙看看,谢谢各位啦 :D
------解决方案--------------------
那这样吧
C#.NET 3.5开发winform程序,后台使用的是MySQL 5.1.x 数据库
从MySQL官网下的 mysql-connector-net-6.5.4,安装后在.NET里使用正常,使用MySqlConnection,MySqlCommand操作的数据库,自己写了一个MySqlHelper.cs,里面有一个执行MySqlCommand的方法用于更新数据
- C# code
private const string connectString = "server=127.0.0.1;uid=root;pwd=root;database=dbname"; public static bool MysqlExcute(MySqlCommand cmd) { MySqlConnection conn = new MySqlConnection(connectString); conn.Open(); cmd.Connection = conn; int rtn = cmd.ExecuteNonQuery(); conn.Close(); return rtn > 0; }
数据库的pic表中有一个longblob字段pic_data,存储图片数据
现在在程序中获得了图片的路径path,下面的程序执行后,会在MySqlExcute方法中的ExecuteNonQuery那句话上报错
无法将“System.Byte[]”的对象强制转换为类型“System.IConvertible”
- C# code
// 读取图片内容 FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); Byte[] imgByte = new Byte[fs.Length]; fs.Read(imgByte, 0, imgByte.Length); // 插入图片 MySqlCommand cmd = new MySqlCommand("INSERT INTO pic(pic_data, upload_username, upload_datetime) " + "VALUES(?pic_name, ?pic_data, ?upload_username, ?upload_datetime)"); cmd.Parameters.AddWithValue("?pic_name", pic_name); cmd.Parameters.AddWithValue("?pic_data", MySqlDbType.VarBinary).Value = imgByte; cmd.Parameters.AddWithValue("?upload_username", Session.username); cmd.Parameters.AddWithValue("?upload_datetime", DateTime.Now.ToString()); if (MySqlHelper.MysqlExcute(cmd)) { // 上传成功 // ... } else { // ... }
查了很多貌似没有遇到我这种情况的,想请大家帮忙看看,谢谢各位啦 :D
------解决方案--------------------
那这样吧
- C# code
MySqlParameter param = new MySqlParameter(); param.MySqlDbType = MySqlDbType.VarBinary; param.Value = imgByte; cmd.Parameters.Add(param);