c# - 插入 MySQL 时在数据库表上获取不正确的 BLOB 值
问题描述
让我快速介绍一下;我有 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 数据及其长度
但是当我尝试使用类似的代码但更改插入表恢复到第一张表时。
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 的长度
我想知道我错过了什么?请给任何建议,谢谢。
我从中得到了这个想法,并在从 C# 中的 SQL 读取 BLOB 后转换为字节数组
我试过什么?
我通过 Visual Studio 2017 进行了调试,发现从 2nd 获取值仍然是正确的。 代码行和快速查看数据查询方法将数据插入第一个表
我认为当我获得像这个线程这样的数据时它可能正在转换,但它仍然没有解决我的问题。:(
解决方案
您在 --> 中使用了 {1} 而不是 {0}String.Format
参数没有交给 INSERT 语句
这将是String.Format
0 而不是 1 的权利。
String.Format(@"INSERT INTO 1st_table (PRODUCTID, ROUTE) VALUES ({0},@route);", tmpInsertValue);
推荐阅读
- node.js - 禁用http端口时如何检查RabbitMQ是否启动并运行
- sparql - 将 GATE gazzeetteer_lkb 连接到 geonames 远程存储库
- qt - 如何在 QML 的列表中直接声明项目?
- php - 输入值未存储在数据库中,但正在读取选项
- python - 如何使用easygui在同一窗口中添加ynbox和messagebox
- node.js - 如何在 MongoDb 中一次将数据插入多个数据库。
- sql - 将多行合并为一行
- c# - 在 DataGrid CellEditEnding 事件中进入中断模式
- c - 将 ncurses 光标位置存储为变量
- python - 如何在具有二元操作的方法之间共享代码?