上一篇
如何在C中高效获取数据库表数据?
- 行业动态
- 2025-05-11
- 3
C#可通过ADO.NET或ORM框架(如Entity Framework)获取数据库表数据,使用SqlConnection建立连接后,执行SQL查询或调用存储过程,通过DataAdapter填充DataSet/DataTable,或通过DataReader逐行读取,也可通过LINQ查询实体模型直接操作表对象,实现数据访问与映射。
在开发C#应用程序时,访问数据库表是高频操作,以下内容将系统化讲解如何通过C#获取数据库表结构及数据,涵盖主流数据库类型(SQL Server、MySQL、SQLite),并提供可直接运行的代码示例,本文遵循技术实践规范,所有方法均通过微软官方文档及行业验证。
核心准备步骤
安装必要组件
- SQL Server:使用
System.Data.SqlClient
命名空间(.NET内置) - MySQL:通过NuGet安装
MySql.Data
包 - SQLite:通过NuGet安装
System.Data.SQLite
包
- SQL Server:使用
建立数据库连接
通过ConnectionString
配置连接参数,示例如下:// SQL Server连接字符串 string sqlServerConn = "Server=服务器地址;Database=数据库名;User Id=用户名;Password=密码;"; // MySQL连接字符串 string mysqlConn = "Server=服务器地址;Database=数据库名;Uid=用户名;Pwd=密码;"; // SQLite连接字符串 string sqliteConn = "Data Source=数据库文件路径;Version=3;";
获取表结构的3种方法
▨ 方法1:查询系统表(通用性强)
通过SQL直接查询数据库的系统元数据表:
using (SqlConnection connection = new SqlConnection(sqlServerConn)) { connection.Open(); string query = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'"; SqlCommand cmd = new SqlCommand(query, connection); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("表名:" + reader["TABLE_NAME"]); } } }
▨ 方法2:使用ADO.NET内置方法(SQL Server专有)
通过GetSchema
方法获取元数据:
DataTable tables = connection.GetSchema("Tables"); foreach (DataRow row in tables.Rows) { Console.WriteLine("表名:" + row["TABLE_NAME"]); }
▨ 方法3:LINQ to SQL(需预配置模型)
适用于已建立实体模型的场景:
DataContext db = new DataContext(connection); var tableNames = db.Mapping.GetTables().Select(t => t.TableName);
完整代码示例(MySQL环境)
using MySql.Data.MySqlClient; public List<string> GetMySQLTables() { List<string> tables = new List<string>(); using (MySqlConnection conn = new MySqlConnection(mysqlConn)) { conn.Open(); string sql = "SHOW TABLES"; MySqlCommand cmd = new MySqlCommand(sql, conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { tables.Add(reader[0].ToString()); } } } return tables; //返回所有表名列表 }
关键技术要点
连接池管理
务必使用using
语句自动释放连接资源,避免内存泄漏。异常处理
添加try-catch
块处理数据库操作异常:try { // 数据库操作代码 } catch (SqlException ex) { Console.WriteLine($"错误代码:{ex.Number},详情:{ex.Message}"); }
安全建议
- 将连接字符串存储在
appsettings.json
或环境变量中 - 生产环境禁用
SA
账户且使用加密传输
- 将连接字符串存储在
常见问题解决方案
问题1:出现“找不到列”错误
检查数据库权限,确保账户有SELECT
权限问题2:连接超时
调整连接字符串中的Connect Timeout=30
参数问题3:中文乱码
在MySQL连接字符串中添加Charset=utf8mb4
通过上述方法,开发者可稳定获取各类数据库的表结构信息,实际应用中需根据具体数据库类型选择最优方案,并遵循安全开发规范。
引用说明
本文代码示例参考:
- 微软ADO.NET官方文档
- MySQL Connector/NET开发者指南
- SQLite官方.NET实现文档