导入 Excel 到 SQL Server
导入 Excel 到 SQL Server
我正在尝试为用户建立一个导入工具,用于将Excel文件导入到SQL Server 2017中。\n我遇到了32位/64位的OLEDB提供程序的障碍。\n我正在使用32位的Microsoft Access前端,而SQL Server是64位的。你不能同时安装64位和32位的ACE OLEDB提供程序。微软甚至为这个问题建立了两个不同的导入/导出向导(一个用于32位,一个用于64位)。\n有没有人知道解决这个问题的方法,或者从Microsoft Access前端将Excel数据导入到SQL Server的替代方法,不依赖于OLEDB提供程序?(保存为文本文件不是一个选项,安装64位Office也不是一个选项)\n谢谢
问题:如何将Excel导入SQL Server?
原因:由于服务器和桌面机器通常已经安装了32位OFFICE驱动程序,因此通常不会出现问题。但如果出现64位和32位相关的问题,可以使用32位运行时执行SSIS包,使用dtexec.exe。
解决方法:使用SSIS包将Excel文件加载到SQL Server中。可以使用数据流任务,并使用Excel源和SQL Server目标。可以使用dtexec.exe在32位运行时中执行SSIS包。不需要在服务器上安装32位驱动程序,因为这些驱动程序已经存在于服务器和桌面机器中。
如果需要在C#中执行SSIS包,可以参考此链接:execute SSIS package from C#
更多关于使用dtexec.exe的信息,请参考此链接:More information on using dtexec.exe
问题的出现原因是:用户希望能够从Excel直接将数据导入到SQL Server中。
解决方法是使用一个Excel插件,即SQL Spreads。用户可以使用此插件构建解决方案,使最终用户能够直接从Excel中插入和更新SQL Server中的数据。用户可以在这里下载一个完全功能的试用版。
以下是问题的解决方法的代码示例:
// 导入所需的命名空间
using System.Data.SqlClient;
using System.Data;
using System.IO;
// Excel文件路径
string excelFilePath = "C:/path/to/excelFile.xlsx";
// SQL Server连接字符串
string connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
// 创建一个新的SQL连接
using (SqlConnection connection = new SqlConnection(connectionString))
{
// 打开连接
connection.Open();
// 创建一个新的SQL命令
using (SqlCommand command = new SqlCommand())
{
// 设置SQL命令的连接
command.Connection = connection;
// 设置要执行的SQL语句
command.CommandText = "INSERT INTO TableName (Column1, Column2) VALUES (@Value1, @Value2)";
// 读取Excel文件中的数据
using (var stream = File.Open(excelFilePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
// 跳过表头行
reader.Read();
// 逐行读取Excel数据
while (reader.Read())
{
// 获取Excel中的列值
string value1 = reader.GetString(0);
int value2 = reader.GetInt32(1);
// 设置SQL命令参数的值
command.Parameters.Clear();
command.Parameters.AddWithValue("@Value1", value1);
command.Parameters.AddWithValue("@Value2", value2);
// 执行SQL命令
command.ExecuteNonQuery();
}
}
}
}
// 关闭连接
connection.Close();
}