c# 实现sql查询DataTable数据集 对接SqlSugar ORM

这篇具有很好参考价值的文章主要介绍了c# 实现sql查询DataTable数据集 对接SqlSugar ORM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有时候对于已经查询到的数据集,想要进行二次筛选或者查询,还得再查一遍数据库

或者其他的一些逻辑处理不太方便,就想着为什么不能直接使用sql来查询DataTable呢?

搜索全网没找到可用方案,所以自己实现了一个。

主要实现思路是使用 SQLite In-Memory Database 内存数据库,

需要的包主要是

System.Data.SQLite

和 SqlSugar

代码如下

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SQLiteHelper
{
    public static class SQLiteHelper
    {
    	public static SqlSugarClient getToSQLiteInMemorySqlSugar(DataTable dt)
        {
            SQLiteConnection conn = SQLiteHelper.ToSQLiteInMemory(dt);
            //创建配置并指定连接字符串
            var config = new ConnectionConfig()
            {
                ConnectionString = conn.ConnectionString,
                DbType = SqlSugar.DbType.Sqlite
            };

            //创建SqlSugarClient
            var db = new SqlSugarClient(config);

            //手动指定底层连接为已有的SQLite连接
            db.Ado.Connection = conn;

            return db;
        }

        private static string GetSQLiteType(Type t)
        {
            if (t == typeof(string)) return "TEXT";
            else if (t == typeof(int)) return "INTEGER";
            else if (t == typeof(double)) return "REAL";
            else if (t == typeof(decimal)) return "NUMERIC";
            else return "BLOB";
        }
        
        private static SQLiteConnection ToSQLiteInMemory(DataTable dt)
        {

            // 创建SQLite in-memory数据库连接
            SQLiteConnection conn = new SQLiteConnection("Data Source=:memory:");
            conn.Open();

            // 创建表结构
            SQLiteCommand cmd = conn.CreateCommand();
            string createTableSql = $"CREATE TABLE {dt.TableName} (";
            foreach (DataColumn col in dt.Columns)
            {
                createTableSql += $"{col.ColumnName} {GetSQLiteType(col.DataType)}, ";
            }
            createTableSql = createTableSql.TrimEnd(',', ' ');
            createTableSql += ")";

            cmd.CommandText = createTableSql;
            cmd.ExecuteNonQuery();

            // 将DataTable bulk insert到SQLite表中
            using (SQLiteTransaction tran = conn.BeginTransaction())
            {
                using (SQLiteCommand insertCmd = new SQLiteCommand(conn))
                {
                    insertCmd.CommandText = $"INSERT INTO {dt.TableName} VALUES({string.Join(",", dt.Columns.Cast<DataColumn>().Select(x => "@" + x.ColumnName))})";

                    foreach (DataRow row in dt.Rows)
                    {
                        foreach (DataColumn col in dt.Columns)
                        {
                            insertCmd.Parameters.AddWithValue("@" + col.ColumnName, row[col.ColumnName]);
                        }
                        insertCmd.ExecuteNonQuery();
                        insertCmd.Parameters.Clear();
                    }
                    tran.Commit();
                }
            }

            return conn;
        }

        

    }
}

调用示例

			// 创建DataTable,添加列
            DataTable dt = new DataTable("Products");
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Price", typeof(decimal));


            // 填充几行数据
            dt.Rows.Add(1, "Apple", 1.99m);
            dt.Rows.Add(2, "Orange", 2.99m);
            dt.Rows.Add(3, "Banana", 0.99m);
            var db = SQLiteHelper.getToSQLiteInMemorySqlSugar(dt);
			//查询结果
            var ret = db.Ado.SqlQuery<dynamic>("select * from Products").ToList();
           

这样就实现了sql查询DataTable的功能

原创不易,能帮到你的话,关注,评论,点赞,收藏走一波。文章来源地址https://www.toymoban.com/news/detail-663024.html

到了这里,关于c# 实现sql查询DataTable数据集 对接SqlSugar ORM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”

      安装达梦数据库后,使用SqlSugar连接测试数据库并基于DBFirst方式创建数据库表对应的类,主要代码如下:   运行到CreateClassFile函数时报如下错误:   通过达梦管理工具查看数据库,PERSON数据库下有ADDRESS表,不清楚为什么报错。   百度错误信息,检索结果中介绍可

    2024年01月25日
    浏览(47)
  • 基于SqlSugar的开发框架循序渐进介绍(31)-- 在查询接口中实现多表联合和单表对象的统一处理

    在一些复杂的业务表中间查询数据,有时候操作会比较复杂一些,不过基于SqlSugar的相关操作,处理的代码会比较简单一些,以前我在随笔《基于SqlSugar的开发框架循序渐进介绍(2)-- 基于中间表的查询处理》介绍过基于主表和中间表的联合查询,而往往实际会比这个会复杂

    2024年02月07日
    浏览(48)
  • 【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集

    在平时使用sql语句查询时,in查询肯定少不了,多数用于一些数据统计或者测试类。in查询并不建议放到实际常用的查询列表里。 此篇文章主要简单聊聊,in查询方法内的参数设置方式,以及通过分隔函数将含有逗号隔开的字符串转为数据集进行查询 在 SQL Server 中,你可以使

    2024年02月15日
    浏览(53)
  • 简明SQL条件查询指南:掌握WHERE实现数据筛选

    条件查询是用于从数据库中根据特定条件筛选数据行的一种方式,它避免了检索整个表中的数据。通常,使用 WHERE 子句来定义过滤条件,只有符合这些条件的数据行才会被返回。 SQL中的运算符有:=、!=、、 等,用于进行条件判断。 在逻辑运算中,常见的运算符包括: and:

    2024年02月09日
    浏览(66)
  • SqlSugar 5.联表查询

    用到的几个实体类 使用 CodeFirst 创建表 1.Join用法 1.1 语法糖1 优点:好理解,五个表以内的联表比较推荐 1.1.1 表和表的连接 若将 .Select((o, cus) = new ViewOrder { Id = o.Id, CustomName =cus.Name }) 修改成.Select((o, cus) = new ViewOrder()) 那就是查询所有字段 1.1.2 表和Queryable的连接 (主表左连了一

    2023年04月08日
    浏览(35)
  • C# excel与DataTable之间的转换

    注意,Excel读入DataTable需要使用NPOI包 DataTable读入Excel

    2024年02月11日
    浏览(28)
  • C# DataTable和List之间相互转换

    最近在捣鼓DataTable,弄到了类型转换,既然弄了,那就整个记录。有不足之处,请多多指教。我看了一下目前的转换方式基本上都大差不差,基本上都是通过反射来操作的。本文介绍的两种方式也都是利用反射来完成的。两种方式都写成的通用类,仅供参考。 DataTable DataTab

    2024年02月01日
    浏览(33)
  • C# Winform DataGridView 控件和 DataTable

    目录 一、概述 二、DataTable 的用法 1.创建表和列 2.添加行 3.取值和赋值 4.删除行 5.遍历 DataTable 6.判断 DataTable 列中是否存在某个值 7.设置主键 8.获取 DataRow 所在的行号 9.DataTable 转换为 List 10.将 List 转 DataTable 三、DataGridView 的用法 1.绑定数据 2.获取绑定的数据源 3.获取 / 设置

    2024年02月10日
    浏览(41)
  • C# 在控制台整齐的输出 DataTable

    效果: 在 Winform 平台,可以用 DataGridView 这样的控件来显示数据库的表单数据,但在 C# 控制台项目中,如果有用到数据库查询,我们想看看查询语句的效果,就比较困难了,比如,我随意写了一个控制台输出,代码如下: 效果: 在 Navicat 16 for MySQL 软件中的查询结果 由于没

    2024年02月12日
    浏览(59)
  • C#中将DataTable转化成ListT的方法解析

    在C#中,数据的操作是至关重要的一个方面,常常需要将数据从一个形式转换成另一个形式以满足我们的需求。其中,DataTable和List是常见的两种数据形式。DataTable是一种表格形式的数据类型,它以行和列的形式存储数据。List是一种集合类型,它可以存储任意类型的对象,并且

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包