📜  自动将数据从excel导入sql server - SQL(1)

📅  最后修改于: 2023-12-03 15:11:47.323000             🧑  作者: Mango

自动将数据从excel导入SQL Server

在编写应用程序时,我们通常需要使用一些外部数据源,比如在Excel表格中维护的数据。为了使程序和数据源之间的数据交流更方便,我们可以将Excel数据导入到SQL Server数据库中。本文将介绍如何自动将数据从Excel导入SQL Server。

准备工作

我们需要使用以下工具:

  • SQL Server Management Studio
  • Visual Studio
  • .NET Framework
  • Excel
创建数据库表

首先,我们需要在SQL Server中创建一个表来存储Excel数据。假设我们要导入的Excel文件中包含以下几列数据:

| ID | 姓名 | 年龄 | | --- | ---- | ---- | | 1 | 张三 | 20 | | 2 | 李四 | 22 | | 3 | 王五 | 25 |

我们可以使用以下SQL语句在SQL Server中创建一个表:

CREATE TABLE Person
(
    Id INT,
    Name NVARCHAR(50),
    Age INT
)
创建C#工程

接下来,我们将创建一个C#工程来自动将Excel数据导入到SQL Server中。我们可以使用Visual Studio进行开发。

步骤:

  1. 在Visual Studio中创建一个新的C#控制台应用程序项目。
  2. 在“解决方案资源管理器”窗口中打开“引用”节点,右键单击并选择“管理NuGet程序包”。
  3. 在“管理NuGet程序包”对话框中搜索“Microsoft.Office.Interop.Excel”,安装该程序包。
  4. 在“引用”节点下一级的“程序集”节点中右键单击“System.Configuration”,选择“添加引用”,将它添加到项目中。
导入Excel数据

我们将使用以下步骤来将Excel数据导入到SQL Server中。

  1. 在Visual Studio的C#项目中添加以下命名空间:
using System.Data.SqlClient;
using Microsoft.Office.Interop.Excel;
using System.Configuration;
using System.Data;
  1. 我们将使用System.Configuration命名空间中的ConfigurationManager类从应用配置文件中读取SQL Server连接字符串。在“App.config”文件中添加以下节点:
<configuration>
  <appSettings>
    <add key="SqlConnectionString"
         value="Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;"/>
  </appSettings>
</configuration>

在应用程序中,使用以下代码来获取连接字符串:

string connectionString = ConfigurationManager.AppSettings["SqlConnectionString"];
  1. 我们需要实例化Excel应用程序对象,并打开我们的Excel文件:
Application application = new Application();
Workbook workbook = application.Workbooks.Open("Excel文件路径");
  1. 然后,我们需要选择工作表并访问它们:
Worksheet worksheet = (Worksheet)workbook.Sheets[1];
Range usedRange = worksheet.UsedRange;
  1. 接下来,我们需要循环遍历表格中的数据并将它们插入到SQL Server表中:
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    SqlCommand command = new SqlCommand("INSERT INTO Person(Id, Name, Age) VALUES(@Id, @Name, @Age)", connection);
    for (int row = 2; row <= usedRange.Rows.Count; row++)
    {
        int id = int.Parse(((Range)usedRange.Cells[row, 1]).Value2.ToString());
        string name = ((Range)usedRange.Cells[row, 2]).Value2.ToString();
        int age = int.Parse(((Range)usedRange.Cells[row, 3]).Value2.ToString());
        command.Parameters.AddWithValue("@Id", id);
        command.Parameters.AddWithValue("@Name", name);
        command.Parameters.AddWithValue("@Age", age);
        command.ExecuteNonQuery();
        command.Parameters.Clear();
    }
    connection.Close();
}
完整代码

最终的C#代码如下所示:

using System;
using System.Data.SqlClient;
using Microsoft.Office.Interop.Excel;
using System.Configuration;
using System.Data;

namespace ExcelToSqlServer
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = ConfigurationManager.AppSettings["SqlConnectionString"];
            Application application = new Application();
            Workbook workbook = application.Workbooks.Open(@"Excel文件路径");
            Worksheet worksheet = (Worksheet)workbook.Sheets[1];
            Range usedRange = worksheet.UsedRange;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                SqlCommand command = new SqlCommand("INSERT INTO Person(Id, Name, Age) VALUES(@Id, @Name, @Age)", connection);
                for (int row = 2; row <= usedRange.Rows.Count; row++)
                {
                    int id = int.Parse(((Range)usedRange.Cells[row, 1]).Value2.ToString());
                    string name = ((Range)usedRange.Cells[row, 2]).Value2.ToString();
                    int age = int.Parse(((Range)usedRange.Cells[row, 3]).Value2.ToString());
                    command.Parameters.AddWithValue("@Id", id);
                    command.Parameters.AddWithValue("@Name", name);
                    command.Parameters.AddWithValue("@Age", age);
                    command.ExecuteNonQuery();
                    command.Parameters.Clear();
                }
                connection.Close();
            }
            workbook.Close(false, Type.Missing, Type.Missing);
            application.Quit();
            Console.WriteLine("数据导入成功!");
            Console.ReadKey();
        }
    }
}

总结

本文介绍了如何自动将数据从Excel导入SQL Server。我们学习了如何创建SQL表、如何使用C#代码将Excel数据插入SQL Server中,并且我们学习了如何使用Visual Studio和.NET Framework开发应用程序。