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

如何通过Visual Studio将Excel数据导入SQL Server?代码读取值失败求助

问题解答

我来帮你搞定这两个问题哈~

一、如何使用Visual Studio将Excel中的数据导入SQL Server?

这里给你分享两种常用的方法:

  • 方法1:用SQL Server导入导出向导(可视化操作,适合快速上手)

    1. 打开Visual Studio,先连接上你的SQL Server数据库
    2. 在「服务器资源管理器」里右键点击目标数据库,选「任务」→「导入数据」
    3. 数据源选「Microsoft Excel」,选中你的Excel文件,记得匹配正确的Excel版本(比如Excel 2016)
    4. 目标选择你的SQL Server数据库,填好服务器名称和认证信息
    5. 选择「复制一个或多个表或视图的数据」,接着挑选要导入的Excel工作表
    6. 可以先预览数据确认没问题,最后点击「完成」就开始导入啦
  • 方法2:用ADO.NET代码手动导入(适合需要自定义逻辑的场景)
    这种方式灵活性更高,步骤大概是:

    1. 用OLEDB或者EPPlus这类库,把Excel数据读到DataTable或者集合中
    2. 用SqlConnection建立和SQL Server的连接
    3. 用SqlCommand执行插入操作,一定要用参数化查询,别直接拼字符串,避免SQL注入风险

二、修复你的Excel数据插入SQL Server代码问题

你写的代码跑不起来,主要踩了这几个坑:

  1. SQL语句拼接错误:你直接把WB.Cells[i, 1]写到SQL字符串里,数据库会把它当成普通文本,根本不会读取Excel单元格的实际值
  2. 未获取单元格真实值:要拿到单元格内容,得用WB.ActiveSheet.Cells[i, 1].Value2
  3. 未执行SQL命令:循环里只设置了CommandText,但没调用cmd.ExecuteNonQuery(),等于只写了命令没执行
  4. 存在SQL注入风险:直接拼接字符串容易被攻击,必须用参数化查询

下面是修正后的代码,你可以参考:

// 假设你已经初始化好SqlConnection conn,并且打开了连接
Workbook WB = Globals.ThisAddIn.Application.ActiveWorkbook;
int lastrow = WB.ActiveSheet.UsedRange.Rows.Count;
// 定义参数化查询模板,避免SQL注入
string insertSql = "INSERT INTO Table_1 (emp_no, emp_name, salary) VALUES (@EmpNo, @EmpName, @Salary)";

for (int i = 2; i <= lastrow; i++)
{
    // 读取Excel单元格的值,同时处理空值情况
    var empNo = WB.ActiveSheet.Cells[i, 1].Value2;
    var empName = WB.ActiveSheet.Cells[i, 2].Value2;
    var salary = WB.ActiveSheet.Cells[i, 3].Value2;

    // 用using包裹SqlCommand,自动释放资源
    using (SqlCommand cmd = new SqlCommand(insertSql, conn))
    {
        // 给参数赋值,空值转成DBNull.Value避免SQL报错
        cmd.Parameters.AddWithValue("@EmpNo", empNo ?? DBNull.Value);
        cmd.Parameters.AddWithValue("@EmpName", empName ?? DBNull.Value);
        cmd.Parameters.AddWithValue("@Salary", salary ?? DBNull.Value);

        // 执行插入操作
        cmd.ExecuteNonQuery();
    }
}

额外提醒几点:

  • 记得用using包裹SqlConnection,确保连接用完自动关闭,避免资源泄漏
  • 如果Excel数据量很大,用SqlBulkCopy批量插入会比逐行插入效率高很多
  • 一定要处理空值,不然遇到空单元格会触发SQL报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:49:43