c# List 实体类、DataTable、JSON转换为 Insert 语句

这篇文章提供了一系列C#方法,用于将List<T>、DataTable和JSON数据转换为数据库的INSERTSQL语句。这些方法利用反射和LINQ处理对象属性,以及序列化和字符串操作将数据转化为SQL语法。注意,JSON转换方法可能存在性能问题,提示可以优化处理。

List转insert:

public static string ListToInsertSql<T>(List<T> list, string table) where T : class
{
    StringBuilder sbt = new StringBuilder();
    PropertyInfo[] properties = typeof(T).GetProperties();
    string colsFiled = string.Join(",", properties.Select(p => p.Name));
    string colsValue = string.Join(",", properties.Select(p => string.Format("@{0}", p.Name)));
    sbt.AppendFormat("INSERT INTO {0} ({1}) VALUES ", table, colsFiled);
    for (int i = 0; i < list.Count; i++)
    {
        sbt.AppendFormat("({0})", colsValue);
        if (i < list.Count - 1)
        {
            sbt.Append(",");
        }
    }
    return sbt.ToString();
}

datatable转insert:

public static string DataTableToInsertSql(DataTable dataTable, string tableName)
{
    var columnNames = string.Join(",", dataTable.Columns.Cast<DataColumn>().Select(c => c.ColumnName));
    var insertSql = new StringBuilder();
    foreach (DataRow row in dataTable.Rows)
    {
        var values = string.Join(",", row.ItemArray.Select(v => string.Format("'{0}'", v.ToString().Replace("'", "''"))));
        insertSql.AppendFormat("INSERT INTO {0} ({1}) VALUES ({2});", tableName, columnNames, values);
    }
    return insertSql.ToString();
}

JSON转insert(注意性能问题,可以采用更好的方法来处理):

// 定义 JsonData 类来解析 JSON 数据
public class JsonData
{
    public List<Dictionary<string, object>> Data { get; set; }
}

// 解析 JSON 数据并生成 Insert 语句
public static string JsonToInsertSql(string json, string tableName)
{
    var jsonData = JsonConvert.DeserializeObject<JsonData>(json);
    if (jsonData == null || jsonData.Data == null || jsonData.Data.Count == 0)
    {
        return string.Empty;
    }

    var columnNames = string.Join(",", jsonData.Data[0].Keys.Select(k => k));
    var insertSql = new StringBuilder();
    foreach (var row in jsonData.Data)
    {
        var values = string.Join(",", row.Values.Select(v => string.Format("'{0}'", v.ToString().Replace("'", "''"))));
        insertSql.AppendFormat("INSERT INTO {0} ({1}) VALUES ({2});", tableName, columnNames, values);
    }

    return insertSql.ToString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值