QuestDB使用DataTable批量插入失败 返回

SqlSugar 沟通中
9 605

版本信息:

运行环境:net8

SqlSugar.QuestDb.RestAPI:4.1.18

SqlSugarCore:5.1.4.204

questdb:9.0.3 Windows版本

我的数据库表结构很简单(WebUI界面生成的)

CREATE TABLE '测试表' ( 
  创建时间 TIMESTAMP,
  测试数据 STRING
) timestamp(创建时间) PARTITION BY MONTH WAL
WITH maxUncommittedRows=500000, o3MaxLag=600000000us;

这是我的测试代码

        SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() {
            ConnectionString = "host=localhost;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;",
            DbType = SqlSugar.DbType.QuestDB,
            IsAutoCloseConnection = true,
            LanguageType = LanguageType.Chinese//错误提示尽可能显示中文
        });
        if (!db.Ado.IsValidConnection()) {
            throw new Exception("数据库连接失败");
        }
        var dt = new DataTable();
        dt.Columns.Add("创建时间", typeof(DateTime));
        dt.Columns.Add("测试数据");
        for (int i = 0; i < 100000; i++) {
            var dr = dt.NewRow();
            dr[0] = DateTime.Now;
            dr[1] = $"数据{i}";
            dt.Rows.Add(dr);
        }
        //int num = db.Insertable(dic).AS("测试表").ExecuteCommand();//单条插入无区别
        int num = db.RestApi().BulkCopy("测试表", dt, "yyyy-MM-dd HH:mm:ss");//批量插入

问题现象:单条插入没啥问题,但是创建DataTable然后插入,有几秒的插入时间,但是返回值是0,数据库查询也没插入进去

还有个奇怪的现象:db.Ado.IsValidConnection()这行语句执行有点慢,得有1秒了

顺带问问这个数据库需要设置IsAutoCloseConnection = true吗?

热忱回答9

  • fate sta fate sta VIP0
    2025/9/29

    是不是网络不稳定,正常来说这个方法不会慢的。

    0 回复
  • @fate sta:我是localhost啊……还有DataTable插入的问题咋整?需要设置AutoCloseConnection吗?支持SqlSugarScope吗?我测试支持传统update语句的,偶尔用update更新点东西应该没问题吧?

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    代码有没有乱用并发之类的。

    0 回复
  • @fate sta:我提供的测试代码就是全部了,Main里执行的,单线程

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    我测试过了。这个操作就第一次慢。。


        var x=  db.Ado.IsValidConnection(); 后面就快了。

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    程序启动的第一次会慢些

    0 回复
  • @fate sta:DataTable插入目前还不支持吗?我尝试建了一个实体类进行插入,也是一样的问题。

    [SugarTable("测试表")]
    public class 测试类 {
        public DateTime 创建时间 { get; set; }
        public string 测试数据 { get; set; }
    }

    代码处

            var list = new List<测试类>();
            for (int i = 0; i < 100000; i++) {
                list.Add(new 测试类() { 创建时间 = DateTime.Now, 测试数据 = $"数据{i}" });
            }
            int num = db.RestApi().BulkCopy<测试类>(list, "yyyy-MM-dd HH:mm:ss.ffffff");

    num返回值依旧是0,数据库没有插入成功,是我哪里写错了吗?

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    image.png

    0 回复
  • fate sta fate sta VIP0
    2025/9/29

    如果你用不了用就用传统写法了吧。 bulkcopy部分用户好像时间格式有问题。

    但是并没找到具体方案。

    0 回复