插入MySQL时在数据库表上获取错误的BLOB值

时间:2019-07-05 11:13:48

标签: c# arrays blob mysqlconnection

让我快速介绍一下;我有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这样的数据时可能正在转换,但是仍然无法解决我的问题。 :(

1 个答案:

答案 0 :(得分:-1)

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

这将是正确的String.Format,其中0而不是1。

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