【发布时间】: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
我想知道我错过了什么?请给任何建议,谢谢。
我从this 和Converting 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