You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:10:51