如何在没有 oledb 的情况下将 Excel 文件数据上传到 SQL Server

2023-12-12

我一直在尝试使用 ASP.NET Core MVC 将数据从 Excel 文件导入到 SQL Server 中。但这段代码无法运行:

[HttpPost]
public IActionResult Index(ICollection<IFormFile> files)
{
    string line;

    using (SqlConnection con = new SqlConnection(@"Data Source=NT;Initial Catalog=StudentDB;Integrated Security=True"))
    {
        con.Open();

        using (StreamReader file = new StreamReader("TestFile.xlsx"))
        {
            while ((line = file.ReadLine()) != null)
            {
                string[] fields = line.Split(',');

                SqlCommand cmd = new SqlCommand("INSERT INTO Persons(ContactID, FirstName, SecondName, Age) VALUES (@contactid, @firstname, @secondname, @age)", con);
                cmd.Parameters.AddWithValue("@id", fields[0].ToString());
                cmd.Parameters.AddWithValue("@firstname", fields[1].ToString());
                cmd.Parameters.AddWithValue("@secondname", fields[2].ToString());

                cmd.ExecuteNonQuery();
            }
        }
    }

    return View();
}

我建议使用 EPPlus 开源免费库,您可以通过 Nuget 安装或访问(https://www.nuget.org/packages/EPPlus/)无需安装 Excel 或任何其他 Interops 即可读取 Excel 文件。

下面是使用 Epplus 的更新代码。我假设你的Excel文件中没有标题行(如果你只是将var row = 1更改为var row = 2,这意味着从第2行开始并忽略标题)

  using (var con = new SqlConnection(@"Data Source=NT;Initial Catalog=StudentDB;Integrated Security=True"))
        {
            con.Open();

            var excelFile = new FileInfo(@"TestFile.xlsx");
            using (var epPackage = new ExcelPackage(excelFile))
            {
                var worksheet = epPackage.Workbook.Worksheets.First();

                for (var row = 1; row <= worksheet.Dimension.End.Row; row++)
                {
                    var rowValues = worksheet.Cells[row, 1, row, worksheet.Dimension.End.Column];
                    var cmd = new SqlCommand("INSERT INTO Persons(ContactID, FirstName, SecondName, Age) VALUES (@contactid, @firstname, @secondname, @age)", con);
                    cmd.Parameters.AddWithValue("@contactid", rowValues["A1"].Value);
                    cmd.Parameters.AddWithValue("@firstname", rowValues["B1"].Value);
                    cmd.Parameters.AddWithValue("@secondname", rowValues["C1"].Value);
                    cmd.Parameters.AddWithValue("@age", rowValues["D1"].Value);

                    cmd.ExecuteNonQuery();
                }

            }

        }

AddWithValue 中的某些参数与您在插入语句中声明的参数不匹配,我也清理了这些参数。使用代码,我能够读取我创建的测试 xlsx 文件,以匹配您的布局并将其插入数据库。希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有 oledb 的情况下将 Excel 文件数据上传到 SQL Server 的相关文章

随机推荐

  • Mongoose删除文档中的数组元素并保存

    我的模型文档中有一个数组 我想根据我提供的密钥删除该数组中的元素 然后更新 MongoDB 这可能吗 这是我的尝试 var mongoose require mongoose Schema mongoose Schema var favor
  • 如何确保链接的默认操作始终处于禁用状态?

    我正在开发一个项目 其中使用大量 ajax 调用来使站点交互更加优雅 我一直在使用的过程是获得脚本的链接 该脚本执行作为链接标记中的 href 存储的适当操作 然后 我使用 jquery 定位该元素并禁用默认操作并执行 ajax 调用 问题
  • Eclipse 中 Scanf 在 printf 之前执行

    我有以下简单的C语言代码 include
  • 在promise then mehod中返回Promise对象时的执行顺序[重复]

    这个问题在这里已经有答案了 代码是 Promise resolve then gt console log 0 return Promise resolve 4 then res gt console log res Promise res
  • 循环组合框 VBA

    我陷入了无法找到正确语法的困境 我正在处理的代码如下所示 Public Function Initializecolors initialize the colors by setting them with the help of the
  • 如何强制将重置推送到远程存储库?

    我们的远程主分支不知何故搞砸了 当前的开发代码与最新的提交一起位于主分支上 显然 开发代码还没有准备好用于主分支 因此 在我的本地存储库中 我重置了最新标签 git reset hard Tag 主分支现在在我的本地存储库上是正确的 现在
  • 以另一种形式访问类的同一实例

    我确信这是一个简单的问题 但我没有足够的经验来知道答案 DataClass Form1 Form2 我有公开课DataClass 在一个单独的文件中 DataClass vb In DataClass我需要访问的数据存储在多个数组中 我有方
  • 在 matplotlib 中绘制大量点和边

    我有一些这种格式的点 大约 3000 和边 大约 6000 points numpy array 1 2 4 5 2 7 3 9 9 2 edges numpy array 0 1 3 4 3 2 2 4 其中边是点的索引 因此每条边的开始
  • 自定义 Bash 提示符正在覆盖自身

    我正在使用自定义 bash 提示符来显示 git 分支 一切都在 etc bash bashrc function formattedGitBranch branch git branch 2 gt dev null sed e s d e
  • 选择每年的最佳记录

    我正在尝试回顾我的 sql 技能 现在我正在尝试在 Northwinddb 上运行一个简单的查询来向我显示每年的顶级客户 但是一旦我使用 TOP 函数 无论我在什么情况下 都只会显示 1 条记录分区依据 这是我的 T SQL 代码 SELE
  • ARM 中的 WFE 指令处理

    WFE 指令如何运作 我读到的是 它使处理器等待 IRQ FIQ event 但是 当您获得 IRQ 时会发生什么 irq fault handler 向量是否在获得中断或执行 WFE 之后的指令时执行 WFE 在概念上等同于 while
  • Firefox 滚动顶部问题

    我对 Firefox 的scrollTop 值和onscroll 事件有疑问 这在 IE Safari 和 Chrome 中效果很好 但 Firefox 似乎滞后 我尝试使用onscroll事件更新一些背景位置 但是当我拿起手柄并快速上下拖
  • ubuntu 16 上的 bash:set -e 不在子 shell 内继承

    当我运行这个命令时 set e echo echo I get himBH作为输出 我期待着这封信e包含在输出中 这是怎么回事 我使用的是 Ubuntu 16 04 1 LTS GNU bash 版本 4 3 46 1 release x8
  • 如何从 AngularJS 指令中选择动态生成的元素?

    在我的指令中 我需要选择某些 DOM 元素 其中一些元素是在 ng repeat 循环中动态生成的 如果我以直接的方式执行此操作 我将只获得静态元素 但是 如果我将选择延迟 500 毫秒 我将获得所有元素 这就是我想要的 虽然这可行 但它不
  • destroy_user_session_path 在 Rails 中触发 GET 而不是 DELETE

    我认为有以下代码 li li 它会生成以下 HTML a href users sign out Sign out a 但是 当单击该链接时 我收到以下错误 No route matches GET users sign out 我在这里做
  • 如何修复 Flask 蓝图的端点错误

    我正在用蓝图学习 Flask 我有以下代码示例 from flask import Flask render template Blueprint g bp Blueprint language name url prefix
  • 自定义 ListView 适配器。 TextChangedListener 调用错误的 EditText

    我有带有自定义适配器的旅行者列表 其中包含两个 EditText edtFirstName 和 edtLastName 我希望当用户输入文本时将更改保存到列表中 并且当单击下一个按钮时将此列表发送到另一个活动 My code public
  • 加密字符串从 Delphi 到 C#

    我正在尝试解密在 Delphi 中使用 Cipher1 3 0 加密的 C 中的一个字符串 来自 Delphi 加密纲要的第一部分 我使用 TCipher Rijndael 我加密的字符串是 this is a test example 密
  • 将字符串中除第一个和最后一个字符之外的所有字符替换为星号[重复]

    这个问题在这里已经有答案了 如何在PHP中将字符串中除了第一个和最后一个字符之外的所有字符替换为星号 例如test应该成为t t and profanity become p y等等 function get starred str len
  • 如何在没有 oledb 的情况下将 Excel 文件数据上传到 SQL Server

    我一直在尝试使用 ASP NET Core MVC 将数据从 Excel 文件导入到 SQL Server 中 但这段代码无法运行 HttpPost public IActionResult Index ICollection