为什么System.Data.DataRow类实例化时没有构造?

本文解释了如何正确地实例化一个DataRow对象。通过使用DataTable的NewRow()方法而非直接调用DataRow构造函数,可以确保创建的数据行与表结构一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果要使用构造函数实例化一个数据行时,根本无法确定该数据行的结构,需要由表的结构来确定行的结构。

所以不应该是:
        System.Data.DataRow dr = new System.Data.DataRow();
而应该是:
        System.Data.DataRow dr = dt.NewRow();        //dt是一个包含列集合的DataTable

 

(http://study.zhupao.com/infoview/Article_10319.html)

 

using System.Data;using System.Data.SQLite;using Spire.Xls;namespace SQLiteToExcel{ class Program { static void Main(string[] args) { // SQLite数据库路径 string sqliteFilePath = "Sample.db"; // Excel文件路径 string excelFilePath = "output/DatabaseToExcel.xlsx"; // 创建一个新的工作簿实例 Workbook workbook = new Workbook(); // 清除默认的工作表 workbook.Worksheets.Clear(); // 创建SQLite连接 using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;")) { connection.Open(); // 获取所有表名 DataTable tables = connection.GetSchema("Tables"); // 遍历每个表 foreach (DataRow tableRow in tables.Rows) { string tableName = tableRow["TABLE_NAME"].ToString(); // 创建一个新的工作表 Worksheet sheet = workbook.Worksheets.Add(tableName); // 获取表数据 string selectQuery = $"SELECT * FROM [{tableName}]"; using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection)) { using (SQLiteDataReader reader = command.ExecuteReader()) { // 获取列名并写入第一行 for (int col = 0; col < reader.FieldCount; col++) { sheet.Range[1, col + 1].Value = reader.GetName(col); } // 设置标题行的字体样式 sheet.Rows[0].Style.Font.IsBold = true; sheet.Rows[0].Style.Font.Size = 12; // 写入数据行 int rowIndex = 2; while (reader.Read()) { for (int col = 0; col < reader.FieldCount; col++) { sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString(); // 自动调整列宽 sheet.AutoFitColumn(col + 1); } // 设置数据行的字体样式 sheet.Rows[rowIndex - 1].Style.Font.Size = 11; rowIndex++; } } } } connection.Close(); } // 保存Excel文件 workbook.SaveToFile(excelFilePath); workbook.Dispose(); Console.WriteLine("数据已成功导出到Excel文件!"); } }}
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值