【问题标题】:Get an incorrect BLOB value on database table when inserting to MySQL插入 MySQL 时在数据库表上获取不正确的 BLOB 值
【发布时间】:2019-11-16 00:35:11
【问题描述】:

让我快速介绍一下;我有 2 个服务器数据库服务器,我使用第二个数据库服务器来备份第一个数据库服务器的表。

问题是表有列存储BLOB值,不知道它存储什么类型文件,所以我尝试使用字节数组将备份数据保存在第二个表中,并在它恢复这些数据到第一个表时需要。

我是这样工作的,

首先,我从第一个表中选择数据并备份(插入)到第二个表

//inserting byte[] to 2nd db
String tmpBatchInsert = String.Format(@"INSERT INTO 2nd_table (VERSION, PRODUCTID, ROUTE) VALUES ('{0}',{1},@route);", version, tmpInsertValue);
MySqlConnection connMySQL2 = new MySqlConnection(connString);
MySqlCommand cmdMySQL2 = new MySqlCommand(tmpBatchInsert, connMySQL2);
cmdMySQL2.Parameters.AddWithValue("@route", routeByte);
connMySQL2.Open();
try
{
    cmdMySQL2.ExecuteNonQuery();
}
catch
{
    MessageBox.Show("Found data duplicate in an active database, skip saving..", "Data duplicate!");
}
connMySQL2.Close();

它工作得很好(我检查了ROUTE 的存储长度值,BLOB 值) img: Blob data and its length on the 2nd table 但是当我尝试使用类似的代码但更改插入表恢复到 1rt 表时。

String tmpBatchInsert = String.Format(@"INSERT INTO 1st_table (PRODUCTID, ROUTE) VALUES ({0},@route);", tmpInsertValue);
MySqlConnection connMySQL2 = new MySqlConnection(connString2);
MySqlCommand cmdMySQL2 = new MySqlCommand(tmpBatchInsert, connMySQL2);
cmdMySQL2.Parameters.Add("@route", MySqlDbType.Blob).Value = routeByte;
connMySQL2.Open();
cmdMySQL2.ExecuteNonQuery();
//MessageBox.Show("Found data duplicate in active database, skip saving..", "Data duplicate!");
connMySQL2.Close();

它存储了错误的 Blob 值。 img2: Blob's length on 1st table

我想知道我错过了什么?请给任何建议,谢谢。

我从thisConverting to Byte Array after reading a BLOB from SQL in C# 得到这个想法

我尝试了什么?

我通过 Visual Studio 2017 进行了调试,发现从 2nd 获取值仍然正确。 code line and quick watch data to query method to insert data to the 1st table

当我得到thread 这样的数据时,我认为它可能正在转换,但它仍然没有解决我的问题。 :(

【问题讨论】:

    标签: c# arrays blob mysqlconnection


    【解决方案1】:

    你在String.Format中使用了{1}而不是{0}-->参数没有交给INSERT语句

    这将是正确的 String.Format 与 0 而不是 1。

    String.Format(@"INSERT INTO 1st_table (PRODUCTID, ROUTE) VALUES ({0},@route);", tmpInsertValue);
    

    【讨论】:

    • 哎呀,抱歉我的线程类型错误。感谢您的评论,但这不是我的问题。编辑线程
    • 你有更多关于 routeByte 变量的上下文吗?
    • routeByte 是从两个表上的 select 'route' 数据中获取的变量。顺便说一句,我现在在外面,我回来后会尽快更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多