【问题标题】:How to upload an Excel file data into SQL Server without oledb如何在没有 oledb 的情况下将 Excel 文件数据上传到 SQL Server
【发布时间】:2017-10-13 00:54:04
【问题描述】:

我一直在尝试使用 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();
}

【问题讨论】:

  • 这段代码有什么问题?有什么错误吗?您是否调试过代码并检查其中发生了什么?
  • 它表示 ("TestFile.xlsx") ,不能从字符串更改为 System.IO.Stream
  • 您能帮我编写有关如何上传 excel 文件数据并存储到我的 Visual Studio 2017 的 sqlserver 中的代码吗?我不知道从哪里开始
  • 如果您不想使用 oledb,您可以探索办公互操作库。您可以使用它读取excel文件。
  • Excel XLS(X) 是一个二进制文件,你不能轻易地将它解析为 CSV 格式的文本(改用字节数组)。您可以尝试使用 EPPlus、NPOI 或 Office interop 等其他库来获取 Excel 文件内容。

标签: c# asp.net-mvc excel asp.net-core asp.net-core-mvc


【解决方案1】:

我建议使用 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 文件以匹配您的布局并插入到数据库中。希望对您有所帮助。

【讨论】:

  • 感谢您的帮助,我尝试使用您提供的代码。我尝试运行它,它来到一个空白页.. >
  • 调试时遇到什么错误?您是否看到数据库中的记录?
  • 没有错误。该应用程序可以运行,但它只是进入空白页面。没有记录被添加到数据库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
相关资源
最近更新 更多