在C#中读取MySQL的MediumBlob并提取Hash段的技术求助
从MySQL Blob中读取并提取Hash段的解决方案
看起来你已经有了读取Blob的初步代码,但还不够完整,而且核心的解析Blob内容提取hash的部分还没落地。假设你的Blob存储的是JSON格式的数据(这是这类场景的常见情况),我来帮你完善并实现这个需求:
完整代码示例
using MySqlConnector; using System.IO; using System.Text; using System.Text.Json; // 初始化数据库连接字符串 string connectionString = "Database=forum;Data Source=localhost;User Id=root;Password="; using MySqlConnection _connection = new MySqlConnection(connectionString); try { _connection.Open(); // 执行查询获取目标Blob数据 string query = "SELECT data FROM xf_user_authenticate WHERE user_id=1"; using MySqlCommand cmd = new MySqlCommand(query, _connection); // 读取Blob对应的字节数组 byte[] bindata = (byte[])cmd.ExecuteScalar(); if (bindata == null || bindata.Length == 0) { Console.WriteLine("未找到匹配的Blob数据"); return; } // 将字节数组转换为字符串(根据Blob实际编码调整,这里默认用UTF8) string blobContent = Encoding.UTF8.GetString(bindata); // 解析JSON内容并提取hash字段 // 若知道数据结构,可创建对应实体类替换dynamic,类型更安全 dynamic jsonData = JsonSerializer.Deserialize<dynamic>(blobContent); string hashValue = jsonData?.hash; if (!string.IsNullOrEmpty(hashValue)) { Console.WriteLine("提取到的Hash值:" + hashValue); } else { Console.WriteLine("Blob内容中未找到hash字段"); } } catch (Exception ex) { Console.WriteLine("操作出错:" + ex.Message); } finally { // 确保数据库连接被关闭 if (_connection.State == System.Data.ConnectionState.Open) { _connection.Close(); } }
关键细节说明
- 资源安全:用
using语句自动管理数据库连接和命令对象,避免资源泄漏 - 编码适配:如果Blob存储的不是UTF8编码(比如ASCII、GBK),要替换对应的
Encoding类型,否则会出现乱码 - 格式兼容:如果Blob存储的是序列化的.NET对象,可改用
BinaryFormatter(注意安全风险)或其他序列化库反序列化;如果是自定义二进制结构,需要按字节偏移量解析hash段 - 异常防护:添加异常捕获,方便排查数据库连接失败、数据格式错误等问题
内容的提问来源于stack exchange,提问作者Moretti
相关产品推荐
相关产品推荐

