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

如何通过单条查询将C#对象的所有值插入MySQL表中

实现动态插入C#对象到MySQL的代码示例

核心思路是通过反射读取对象属性,动态生成参数化的INSERT语句,既避免SQL注入风险,也能适配任意结构的实体类。

首先需要安装MySqlConnector NuGet包作为MySQL驱动。

SaveData方法实现

using MySqlConnector;
using System.Reflection;
using System.Threading.Tasks;

public class DataAccess
{
    /// <summary>
    /// 动态插入实体对象到MySQL表
    /// </summary>
    /// <typeparam name="T">实体类型</typeparam>
    /// <param name="operateType">操作类型,此处默认处理插入逻辑</param>
    /// <param name="entity">已赋值的实体对象</param>
    /// <param name="connectionString">MySQL数据库连接串</param>
    public async Task SaveData<T>(string operateType, T entity, string connectionString)
    {
        // 默认约定实体类名即为对应表名,可自行扩展读取自定义Table特性的值适配自定义表名
        string tableName = typeof(T).Name;
        // 读取实体的所有公共可读写属性
        var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
                                  .Where(p => p.CanRead)
                                  .ToList();

        // 生成列名列表,加反引号避免和MySQL关键字冲突
        var columnNames = properties.Select(p => $"`{p.Name}`");
        // 生成参数占位符
        var paramPlaceholders = properties.Select(p => $"@{p.Name}");

        // 拼接完整INSERT语句
        string insertSql = $"INSERT INTO `{tableName}` ({string.Join(", ", columnNames)}) VALUES ({string.Join(", ", paramPlaceholders)})";

        using var conn = new MySqlConnection(connectionString);
        await conn.OpenAsync();
        using var cmd = new MySqlCommand(insertSql, conn);

        // 批量给参数赋值
        foreach (var prop in properties)
        {
            object value = prop.GetValue(entity) ?? DBNull.Value;
            cmd.Parameters.AddWithValue($"@{prop.Name}", value);
        }

        await cmd.ExecuteNonQueryAsync();
    }
}

调用示例

和你预期的调用形式完全匹配:

// DeviceDb为你的MySQL连接串
await dataAccess.SaveData("insert into", mcReadings, DeviceDb);

可选优化方案

  • 列名映射:如果实体属性名和表列名不一致,可以自定义Column特性,反射时读取特性值作为列名
  • 自增列过滤:自定义InsertIgnore特性,反射时跳过带有该特性的自增主键列,无需手动赋值
  • 反射结果缓存:频繁调用该方法时可缓存每个实体类型的属性列表,降低反射性能损耗

内容的提问来源于stack exchange,提问作者Tom Boudniatski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:51:01