如何通过 ssms 或 c# 在 SQL Server 2016 数据库中保存 Excel 文件?

格拉德尔

我正在尝试通过 ssms 或 C# 将现有的 Excel 文件保存到我的 SQL Server 2016 数据库中。

我想将我的 Excel 文件的每一行保存在一个 C# 对象中,然后将其保存到我的数据库中,或者您有更好的想法吗?

我还考虑将 Excel 文件另存为 a*.csv并通过我的数据库中的 ssms 导入此文件。

您会推荐这两个想法中的哪一个,或者有没有其他方法可以解决这个问题?

如果您有任何问题,我很乐意回答。

我预先感谢您提供所有答案和提示!

伊山沙阿

对于您的问题,您可以尝试以下方法:

1) 使用 SQLBulkcopy:

顾名思义,SqlBulkCopy 类可以从一个源到另一个源进行批量插入,因此可以使用 SqlBulkCopy 类轻松读取和插入 Excel 工作表中的所有行。

protected void Upload(object sender, EventArgs e)
{
    //Upload and save the file
    string excelPath = Server.MapPath("~/Files/") + Path.GetFileName(FileUpload1.PostedFile.FileName);
    FileUpload1.SaveAs(excelPath);

    string conString = string.Empty;
    string extension = Path.GetExtension(FileUpload1.PostedFile.FileName);
    switch (extension)
    {
        case ".xls": //Excel 97-03
            conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
            break;
        case ".xlsx": //Excel 07 or higher
            conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString;
            break;

    }
    conString = string.Format(conString, excelPath);
    using (OleDbConnection excel_con = new OleDbConnection(conString))
    {
        excel_con.Open();
        string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
        DataTable dtExcelData = new DataTable();

        //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default.
        dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
                new DataColumn("Name", typeof(string)),
                new DataColumn("Salary",typeof(decimal)) });

        using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con))
        {
            oda.Fill(dtExcelData);
        }
        excel_con.Close();

        string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(consString))
        {
            using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
            {
                //Set the database table name
                sqlBulkCopy.DestinationTableName = "dbo.tblPersons";

                //[OPTIONAL]: Map the Excel columns with that of the database table
                sqlBulkCopy.ColumnMappings.Add("Id", "PersonId");
                sqlBulkCopy.ColumnMappings.Add("Name", "Name");
                sqlBulkCopy.ColumnMappings.Add("Salary", "Salary");
                con.Open();
                sqlBulkCopy.WriteToServer(dtExcelData);
                con.Close();
            }
        }
    }
}

此处这段代码添加了一个 Excel 表,其中包含三列作为 Id、Name 和 Salary。

2)在SSMS中使用DTS:

您可以使用 SQL Server 数据转换服务 (DTS) 导入向导或 SQL Server 导入和导出向导将 Excel 数据导入 SQL Server 表。当您逐步完成向导并选择 Excel 源表时,请记住,附加有美元符号 ($) 的 Excel 对象名称代表工作表(例如,Sheet1$),而没有美元符号的普通对象名称代表 Excel命名范围。

3)使用SSIS包:

您可以创建 SSIS 包来导入 excel 文件。为此,您可以在 Visual Studio 或 SQL Server 数据工具中使用 BIDS。

您可以将您的 excel 文件作为 excel 源,并在目标中提供您的 SQL 服务器数据库表。执行必要的映射,您就可以开始了。

现在,您一定有一个问题,例如何时使用哪种方法?

使用方法一,当您在用户端提供导入excel文件的功能时,即根据应用需求,用户可以上传本地excel表。对于此用例,您应该注意的一件事是,用户必须了解模板。如果您编写了导入 3 列 excel 的代码,而用户尝试导入 4 列,则将来会出现一些错误。因此,请确保您提供用户应下载并填写并上传的模板。

使用方法 2,无论何时您只想加载数据一次,或者您可以说您要执行初始加载。您可以使用这种方法,因为它最简单,并且需要更少的时间来进行配置。

使用方法 3,当您有一些需要从某个共享位置及时导入 excel 数据时。例如,您将每月移动帐单导入某些供应商提供的数据库中。您可以为此功能创建一个包并执行 SSIS 配置并创建一个包。创建包后,您可以创建 SQL 作业并根据要求对其进行调度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在SQL Server中保存数据库默认位置

如何在C#中还原SQL Server 2012数据库.bak文件?

SQL Server 2016复制数据库向导错误

将SQL Server 2008数据库迁移到2016

如何更新SQL加载项以在SSMS 2016中工作?

即使SSMS连接没有问题,也无法将Excel 2016连接到Azure SQL数据库

通过SSMS将平面文件导入SQL Server失败

SQL Server 2016 SSMS Json格式

如何通过PowerShell连接到本地SQL Server 2016并执行存储在.sql文件中的SQL?

使用SSMS在SQL Server 2017中安装SQL Server示例数据库

在Excel 2016中创建向后兼容的SQL Server数据连接

从SQL Server 2016数据库创建dBaseIV文件

如何在SQL数据库中保存Unicode字符

如何在SQL Server数据库中保存文本和图像的组合

如何在SQL数据库中保存多个选项?

如何从SQL Server数据库的各种控件中保存多个值?

如何允许在SQL数据库中保存重复键

如何在SQL数据库中保存列表?

如何通过使用SQL Server Management Studio将Excel文件作为二进制类型导入数据库表中

c#如何将多个文件上传到SQL Server数据库?

如何在数据库中保存Blob文件

具有本地SSMS功能/ SSMS Boost的SQL Server搜索数据库对象“即时”

在SSMS 2016上为SQL Server 2008 R2数据库开发

SQL Server:无法通过 SSMS 编辑数据

如何从 SSMS 2016 (Microsoft SQL Server) 注销?

SSMS 17.9 在 SQL Server 2014 而不是 2016 上打开数据库

如何将 SQL Function 部署到目标 SQL Server 2016 数据库

使用 Python 在 SQL Server 数据库中保存文件时保留 XML 版本

如何使用 C# 在 Azure SQL 数据库中保存和存储数据