You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#项目中MySQL不指定库名如何获取当前库所有列信息?

解答

核心结论

两个需求都可以实现,不需要在查询语句的WHERE子句中硬编码数据库名,所有配置完全依赖连接字符串即可完成。

实现原理

MySQL自带的INFORMATION_SCHEMA.COLUMNS系统表存储了所有实例下所有数据库的列元数据,配合MySQL内置的DATABASE()函数,就可以自动获取当前连接默认绑定的数据库名,该默认库就是你在连接字符串Database/Initial Catalog参数中指定的库。

可直接使用的查询语句

以下SQL不需要修改任何固定参数,会自动适配当前连接字符串绑定的数据库:

SELECT 
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  IS_NULLABLE,
  COLUMN_DEFAULT,
  CHARACTER_MAXIMUM_LENGTH,
  COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = DATABASE();

注:如果你的数据库账号有多个库的访问权限,该查询也只会返回连接字符串指定库的列信息,不会涉及其他库的数据。

C# 调用示例(以MySqlConnector驱动为例)

全程不需要在代码中硬编码数据库名,仅依赖连接字符串配置:

// 仅需在连接字符串中指定Database参数即可,无需其他位置写库名
var connectionString = "server=你的服务地址;user=你的账号;password=你的密码;database=目标库名;";
using var conn = new MySqlConnection(connectionString);
conn.Open();

var cmd = new MySqlCommand(@"
SELECT 
  TABLE_NAME,
  COLUMN_NAME,
  DATA_TYPE,
  IS_NULLABLE,
  COLUMN_DEFAULT,
  CHARACTER_MAXIMUM_LENGTH,
  COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = DATABASE();
", conn);

using var reader = cmd.ExecuteReader();
while (reader.Read())
{
    var tableName = reader.GetString("TABLE_NAME");
    var columnName = reader.GetString("COLUMN_NAME");
    var dataType = reader.GetString("DATA_TYPE");
    // 按需读取其他字段即可
}

扩展适配

如果后续需要切换查询的数据库,仅需修改连接字符串中的Database参数,不需要修改任何查询逻辑;如果需要过滤掉视图仅保留业务表,在WHERE子句追加AND TABLE_TYPE = 'BASE TABLE'即可。

内容的提问来源于stack exchange,提问作者user3559195

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:15:01