我正在开发一个应用程序,用于在C#中的两个数据库之间传输数据。我有一个方法在MySQL中插入BLOB类型的数据。执行时我收到错误Unable to cast object of type 'System.Byte[]' to type 'System.IConvertible'.
代码#
public static void FiletoSql(MemoryStream fileToPut, MySqlConnection con)
{
try
{
const string preparedCommand =
@"update user_account_statement set STATEMENT_FILE=@ssfile, create_date_time=@udatetime where statement_Id=1070";
using (var sqlWrite = new MySqlCommand(preparedCommand, con))
{
sqlWrite.Parameters.AddWithValue("@ssfile", MySqlDbType.Blob).Value = fileToPut.ToArray();
sqlWrite.Parameters.AddWithValue("@udatetime", MySqlDbType.DateTime).Value =
DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
sqlWrite.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我无法确切地了解转换中的问题。
修改:我试过了:
var fileData=new MySqlParameter("@ssfile",MySqlDbType.Blob,data.Length) {
Value = data
};
sqlWrite.Parameters.Add(fileData);
sqlWrite.Parameters.AddWithValue("@udatetime", MySqlDbType.DateTime)
.Value = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
var cmd = sqlWrite;
sqlWrite.ExecuteNonQuery();
现在我收到错误输入字符串的格式不正确。
答案 0 :(得分:0)
哇!!得到了答案。
经过测试的解决方案:
public static void FiletoSql(MemoryStream fileToPut, MySqlConnection con)
{
byte[] data = fileToPut.ToArray();
try
{
const string preparedCommand =
@"update user_account_statement set STATEMENT_FILE=@ssfile, create_date_time=@udatetime where statement_Id=1070";
using (var sqlWrite = new MySqlCommand(preparedCommand, con))
{
sqlWrite.Parameters.Add("@ssfile", MySqlDbType.Blob);
sqlWrite.Parameters.Add("udatetime", MySqlDbType.DateTime);
sqlWrite.Parameters["@ssfile"].Value = data;
sqlWrite.Parameters["udatetime"].Value=DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
sqlWrite.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}