首页 > 数据库 >C# 用统一代码动态查询数据库并显示数据

C# 用统一代码动态查询数据库并显示数据

时间:2024-09-25 12:20:12浏览次数:9  
标签:C# 代码 查询数据库 获取 ToString reader 类型 动态 字段名

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        编写数据库程序很头疼的是如果表很多但操作都差不多怎么办,比较灵活的方式是用代码来动态处理,只需要提供查询语句和相关控制参数,就可以灵活地处理适应不同的表。

        这个思路和定制化思路不同,定制化实现的实体字段、表名都是明确定义的,具有强类型安全,如果有错误编译无法通过。但是缺点是难以提供不同表的通用限制,比如对相同的字段进行过滤(或许是我不知道?不管怎么说,我们还是需要考虑一下不同的解决方案)。

        动态处理由于涉及到表结构的信息都是动态的,无法在编译阶段检查,因此如何在编码时自我约束、避免留坑就是最大的问题。至于技术,倒是很简单的。

        以下以包Mysql.data提供的功能为例,不过任何数据库都提供了相似的功能。

目录

一、执行动态查询

二、动态获取结果集信息

2.1 获取字段数reader.FieldCount

2.2 获取字段名reader.GetName(i)

2.3 获取字段类型reader.GetFieldType(i)

2.4 获取字段值reader[0].ToString()

三、完整示例


一、执行动态查询

        执行动态查询通常使用一个command对象,传入一个字符串类型的SQL语句,如果语句中包含了参数,再后面添加参数到command对象,最后执行command对象就可以获得结果集。

        因为SQL语句是字符串,所以我们可以随意定制语句(当然此时就不太方便使用参数化查询了)。

        代码示例:

MySqlCommand cmd = new("select * from table", connection);
MySqlDataReader reader = cmd.ExecuteReader();

        connection是已经完成连接的数据库连接对象。 

二、动态获取结果集信息

        结果集里面包含了有多少字段、每个字段的名称和类型,根据这些信息可以从容地把结果集显示在控件里或者打印出来。

2.1 获取字段数reader.FieldCount

        使用这个属性即可获得结果集的字段数,即使没有一行记录返回(只要执行正确)。

2.2 获取字段名reader.GetName(i)

        使用这个方法获取指定字段的名称。字段名称如果不满意可以直接在SQL语句里指定,标准语法是使用as关键字,“原始字段名 as 新字段名”,比如“count(*) as total”。

2.3 获取字段类型reader.GetFieldType(i)

        为啥不是GetType?因为GetType返回的是reader的类型。其实错的是GetName,用GetFieldName更好。也不是大厂设计的东西就经过了大脑。

        我用的这个包返回的类型是C#的类型,比如System.Int。其实有时候我们更想知道数据库里面的类型,这需要查架构视图才行,如果我自己设计,就会加上一个方法返回数据库里面的类型。

2.4 获取字段值reader[0].ToString()

        reader[i]即可访问字段,如果只是为了显示可以用ToString()转换任何类型。

三、完整示例

MySqlCommand cmd = new(sql.ToString(), connection);
MySqlDataReader reader = cmd.ExecuteReader();

if (0 == dataGridView.Columns.Count)
{
    for (int i = 0; i < reader.FieldCount; ++i)
	{
		_ = dataGridView.Columns.Add(reader.GetName(i), reader.GetName(i) + " " + reader.GetFieldType(i));
	}
}


while (reader.Read())
{
	int item = dataGridView.Rows.Add(reader[0].ToString());
    for(int i=1;i<reader.FieldCount;++i)
    {
	    dataGridView.Rows[item].Cells[i].Value = reader[i].ToString();
	}
}
reader.Close();

(这里是文档结束)

标签:C#,代码,查询数据库,获取,ToString,reader,类型,动态,字段名
From: https://blog.csdn.net/2301_77171572/article/details/142519333

相关文章

  • centos(linux):用命令设置用户的shell以及/bin/false和/sbin/nologin的区别
    一,/bin/false和/sbin/nologin作为shell时的区别1,/bin/false/bin/false是一个什么都不做,立即返回非零退出状态的命令。它通常用于禁止用户登录用户不会收到任何错误或提示信息,登录尝试简单地被拒绝,没有任何解释2,/sbin/nologin/sbin/nologin是一个专门设计来阻止用户登录的程......
  • Windows环境下安装pytorch及注意事项
    前言:最近学习pytorch,在安装配置环境时花了很大功夫,实际上整件事情并不难,但是由于有很多细节比如版本匹配问题,可能会踩很多坑,从而浪费大量时间,故我在成功安装配置完pytorch后,写下一点总结,为后来者提供一些参考,使能够将更多的时间真正专注于科研上,而不必在安装配置上徒添烦恼。......
  • 使用 NCache 将 Java 微服务扩展到极致性能
            微服务已成为软件开发领域的一种变革性架构方法,提供了从整体结构到更加模块化和可扩展的系统的范式转变。微服务的核心是将复杂的应用程序分解为更小的、可独立部署的服务,这些服务可以无缝通信,从而提高敏捷性、灵活性和易维护性。这种分散的方法使开发人员能够专注......
  • Java 性能调优:调整 GC 线程以获得最佳结果
        垃圾回收(GC)在Java的内存管理中起着重要作用。它有助于回收不再使用的内存。垃圾回收器使用自己的线程集来回收内存。这些线程称为GC线程。有时,JVM最终可能会有太多或太少的GC线程。在这篇文章中,我们将讨论为什么JVM最终会拥有太多/太少的GC线程,它的后果,以及解......
  • 嵌入式C语言自我修养:C语言的面向对象编程思想
    ⭐关联知识点:C和C++的区别代码复用与分层思想什么是代码复用呢?(1)函数级代码复用:定义一个函数实现某个功能,所有的程序都可以调用这个函数,不用自己再单独实现一遍,函数级的代码复用。(2)将一些通用的函数打包封装成库,并引出API供程序调用,实现了库级的代码复用;(3)将一些类似的应用程序抽象成......
  • KBPC1010-LK-ASEMI新能源专用KBPC1010-LK
    编辑:llKBPC1010-LK-ASEMI新能源专用KBPC1010-LK型号:KBPC1010-LK品牌:ASEMI封装:KBPC-4批号:2024+分类:整流桥特性:整流方桥、整流桥平均正向整流电流(Id):10A最大反向击穿电压(VRM):1000V恢复时间:>2000ns结温:-55℃~150℃正向峰值电压:1.10V引脚数量:4芯片个数:4芯片尺寸:MILKBPC1010-LK特点芯片与底......
  • 嵌入式C语言自我修养:C语言的模块化的编程思想
    不同模块如何集成到系统中去?模块的编译和链接一个C语言项目划分成不同的模块,通常由多个文件来实现。在项目编译过程中,编译器是以C源文件为单位进行编译的,每一个C源文件都会被编译器翻译成对应的一个目标文件。链接器对每一个目标文件进行解析,将文件中的代码段、数据段分别组装,生成......
  • 晶美特JEMETE PPTC自恢复保险丝在电池及电池组上的过流保护应用
    JEMETE晶美特PPTC自恢复保险丝在电池及电池组上的过流保护应用非常必要。电池及电池组作为各种便携设备的能源供给部件,其安全性与可靠性对于设备的正常运行至关重要。由于电池的充电与放电涉及到电流的流动,因此过流问题也是电池及电池组面临的重要风险之一。PPTC自恢复保险丝在电......
  • C和指针:函数
    函数定义函数体就是一个代码块,它在函数被调用时执行。类型函数名(形式参数)代码块与函数定义相反,函数声明出现在函数被调用的地方。函数声明编译器是如何知道该函数期望接受的是什么类型和多少数量的参数。原型int*find_int(intkey,intarray[1,intlen);原型告诉编译器函数......
  • TACO:野外废弃物图像数据集(猫脸码客 第193期)
    TACO:野外废弃物图像数据集的深度探索在环境保护日益成为全球共识的今天,精准高效地识别与清理野外废弃物成为了环境保护领域的重要课题。为了实现这一目标,深度学习技术,尤其是计算机视觉领域的目标检测算法,展现出了巨大的潜力。然而,这一技术的应用离不开高质量、多样化的数据集支持。......