如何用Visual Studio 2017控制台应用将Excel数据导入SQL 2014
Hey Carter, I feel your pain—sifting through outdated docs when you're just starting out is the worst. Let's break down a straightforward, working method for your setup (Visual Studio 2017 + SQL Server 2014 Express) to import Excel data into SQL via a console app.
简便的Excel到SQL Express导入方案(适配VS2017 + SQL2014)
前期准备
- 确保你的SQL Server Express允许本地连接(用Windows身份验证最省心,不用额外配置SQL账号)
- 在Visual Studio 2017中新建一个控制台应用(.NET Framework)(别选.NET Core,这个版本的VS对Framework的支持更稳定,和SQL2014搭配也更顺畅)
步骤1:安装必要的NuGet包
右键你的项目 → 选择「管理NuGet包」,安装两个关键包:
EPPlus(选版本4.5.3.3,这个版本免费且兼容VS2017,更高版本需要商业授权):用来轻松读取Excel文件内容System.Data.SqlClient(选版本4.8.3):官方提供的SQL Server交互工具,适配你的SQL2014
步骤2:提前创建SQL目标表
先在SQL Server里建好和Excel结构对应的表。比如你的Excel有ID、Name、Age三列,SQL表可以这么建:
CREATE TABLE [dbo].[Person]( [ID] INT NOT NULL, [Name] NVARCHAR(50) NOT NULL, [Age] INT NULL, CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([ID] ASC) )
步骤3:编写核心导入代码
替换Program.cs里的内容为以下代码(记得修改注释里的路径和数据库名):
using System; using System.Data; using System.Data.SqlClient; using OfficeOpenXml; namespace ExcelToSqlImporter { class Program { static void Main(string[] args) { // 替换成你的Excel文件路径 string excelFilePath = @"C:\YourExcelFile.xlsx"; // 替换成你的数据库名,Windows身份验证无需账号密码 string sqlConnectionString = @"Server=.\SQLEXPRESS;Database=YourDatabaseName;Trusted_Connection=True;"; // 1. 把Excel数据读取到DataTable里 DataTable excelData = new DataTable(); using (var package = new ExcelPackage(new System.IO.FileInfo(excelFilePath))) { // 取Excel里的第一个工作表 ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; int totalRows = worksheet.Dimension.Rows; int totalCols = worksheet.Dimension.Columns; // 用Excel的表头作为DataTable的列名 for (int col = 1; col <= totalCols; col++) { excelData.Columns.Add(worksheet.Cells[1, col].Text); } // 从第二行开始读取数据(跳过表头) for (int row = 2; row <= totalRows; row++) { DataRow newRow = excelData.NewRow(); for (int col = 1; col <= totalCols; col++) { // 如果是数字/日期类型,可以在这里加格式转换逻辑 newRow[col - 1] = worksheet.Cells[row, col].Text; } excelData.Rows.Add(newRow); } } // 2. 批量导入到SQL Server using (SqlConnection connection = new SqlConnection(sqlConnectionString)) { connection.Open(); // 使用SqlBulkCopy批量导入,比逐行插入快N倍 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = "dbo.Person"; // 替换成你的目标表名 // 如果Excel列名和SQL列名完全一致,这一步可以省略,自动匹配 foreach (DataColumn col in excelData.Columns) { bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName); } try { bulkCopy.WriteToServer(excelData); Console.WriteLine("数据导入成功啦!"); } catch (Exception ex) { Console.WriteLine($"导入失败:{ex.Message}"); } } } Console.ReadLine(); } } }
新手必看注意事项
- Excel格式:确保用
.xlsx格式,如果是旧的.xls文件,先转成.xlsx再导入 - 列名匹配:Excel的表头要和SQL表的列名一致,不一致的话手动修改
ColumnMappings里的对应关系 - 权限问题:右键Visual Studio选择「以管理员身份运行」,避免文件读取或数据库连接权限不足
- 数据类型转换:如果Excel里的数字/日期显示成文本,要在代码里加转换逻辑,比如年龄列:
newRow[col - 1] = int.TryParse(worksheet.Cells[row, col].Text, out int age) ? age : DBNull.Value;
这个方法之所以适合新手,是因为它不需要复杂的配置,用的都是官方或成熟的工具,代码逻辑清晰,你可以跟着注释一步步修改,很容易上手。
内容的提问来源于stack exchange,提问作者Carter
相关产品推荐
相关产品推荐

