如何将不同格式的Excel文件导入SQL Server数据库

时间:2018-09-06 01:09:37

标签: c# sql-server reporting-services

我有一个需要将不同供应商的不同Excel文件导入SQL Server数据库的要求。我已经创建了SSRS软件包,为此我需要手动将数据放入我创建的格式中,然后使用SSRS软件包导入。使用C#将不同格式的Excel导入SQL Server数据库的最佳和最快的方法是什么?

1 个答案:

答案 0 :(得分:0)

将其分为两个步骤:

1)将文件保存在某处-这很常见:

string saveFolder = @“ C:\ temp \ uploads”; //在计算机上选择一个文件夹来存储上传的文件

string filePath = Path.Combine(saveFolder,FileUpload1.FileName);

FileUpload1.SaveAs(filePath); 现在,您将文件保存在本地,即可完成真正的工作。

2)从文件中获取数据。您的代码应该可以按原样工作,但是您可以通过以下方式简单地编写连接字符串:

string excelConnString = String.Format(“ Provider = Microsoft.Jet.OLEDB.4.0; Data Source = {0}; Extended Properties =” Excel 12.0“;”,filePath); 然后,您可以考虑删除刚刚上传并导入的文件。

为了提供更具体的示例,我们可以将您的代码重构为两种方法:

private void SaveFileToDatabase(string filePath)
{
    String strConnection = "Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\Hemant\\documents\\visual studio 2010\\Projects\\CRMdata\\CRMdata\\App_Data\\Database1.mdf';Integrated Security=True;User Instance=True";

    String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath);
    //Create Connection to Excel work book 
    using (OleDbConnection excelConnection = new OleDbConnection(excelConnString))
    {
        //Create OleDbCommand to fetch data from Excel 
        using (OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]", excelConnection))
        {
            excelConnection.Open();
            using (OleDbDataReader dReader = cmd.ExecuteReader())
            {
                using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
                {
                    //Give your Destination table name 
                    sqlBulk.DestinationTableName = "Excel_table";
                    sqlBulk.WriteToServer(dReader);
                }
            }
        }
    } 
}


private string GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl)
{


    string filePath = Path.Combine(saveDirectory, fileUploadControl.FileName);

    fileUploadControl.SaveAs(filePath);

    return filePath;

}

然后您可以简单地调用SaveFileToDatabase(GetLocalFilePath(@“ C:\ temp \ uploads”,FileUpload1));

考虑为您的Excel连接字符串查看其他扩展属性。它们很有用!

您可能要进行的其他改进包括将Sql数据库连接字符串放入config中,并添加适当的异常处理。请考虑此示例仅用于演示!