c# sqlite 批量生成insert语句的函数

函数开始

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Text;

public class SqliteHelper
{
    public static List<string> GenerateInsertStatements(string tableName, List<string> columns, List<List<object>> data)
    {
        List<string> insertStatements = new List<string>();

        foreach (var row in data)
        {
            if (row.Count != columns.Count)
            {
                throw new ArgumentException("The number of columns and data items in a row must match.");
            }

            StringBuilder sb = new StringBuilder();
            sb.Append($"INSERT INTO {tableName} (");

            // Add column names
            sb.Append(string.Join(", ", columns));

            sb.Append(") VALUES (");

            // Add values
            for (int i = 0; i < row.Count; i++)
            {
                if (row[i] is string)
                {
                    sb.Append($"'{row[i]}'");
                }
                else if (row[i] is DateTime)
                {
                    sb.Append($"'{((DateTime)row[i]).ToString("yyyy-MM-dd HH:mm:ss")}'");
                }
                else
                {
                    sb.Append(row[i]);
                }

                if (i < row.Count - 1)
                {
                    sb.Append(", ");
                }
            }

            sb.Append(");");

            insertStatements.Add(sb.ToString());
        }

        return insertStatements;
    }
}

调用方式

csharp 复制代码
class Program
{
    static void Main()
    {
        string tableName = "Users";
        List<string> columns = new List<string> { "Id", "Name", "Age", "CreatedAt" };
        List<List<object>> data = new List<List<object>>
        {
            new List<object> { 1, "Alice", 25, DateTime.Now },
            new List<object> { 2, "Bob", 30, DateTime.Now },
            new List<object> { 3, "Charlie", 35, DateTime.Now }
        };

        List<string> insertStatements = SqliteHelper.GenerateInsertStatements(tableName, columns, data);

        foreach (var sql in insertStatements)
        {
            Console.WriteLine(sql);
        }
    }
}

输出

csharp 复制代码
INSERT INTO Users (Id, Name, Age, CreatedAt) VALUES (1, 'Alice', 25, '2023-10-05 12:34:56');
INSERT INTO Users (Id, Name, Age, CreatedAt) VALUES (2, 'Bob', 30, '2023-10-05 12:34:56');
INSERT INTO Users (Id, Name, Age, CreatedAt) VALUES (3, 'Charlie', 35, '2023-10-05 12:34:56');
相关推荐
hqwest42 分钟前
C#WPF实战出真汁08--【消费开单】--餐桌面板展示
c#·wpf·ui设计·wpf界面设计
orangapple1 小时前
WPF 打印报告图片大小的自适应(含完整示例与详解)
c#·wpf
★YUI★16 小时前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
谷宇.16 小时前
【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
游戏·unity·c#·游戏程序·unity3d·游戏开发·游戏编程
LZQqqqqo17 小时前
C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
windows·c#·list
Dm_dotnet20 小时前
Stylet启动机制详解:从Bootstrap到View显示
c#
三千道应用题21 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf
唐青枫1 天前
别滥用 Task.Run:C# 异步并发实操指南
c#·.net
我好喜欢你~1 天前
C#---StopWatch类
开发语言·c#
一阵没来由的风2 天前
拒绝造轮子(C#篇)ZLG CAN卡驱动封装应用
c#·can·封装·zlg·基础封装·轮子