当我尝试通过MSSQL Server数据导入连接到任何Excel时出现此错误,即SSIS包"Microsoft.ACE.OLEDB.16.0"提供程序未在本地计算机上注册.(System.Data)它不是相同的版本我认为需要其他修补
我们的开发服务器具有64位SQL Server 2008 R2和SSIS.为了能够直接从T-SQL(via OPENROWSET
)导入XLSX文件,我们在dev服务器上安装了Microsoft Access Database Engine Redistributable 64-bit
.服务器已经安装了32位版本,因此我们使用/ passive开关安装它.
由于这样做,我们现有的包失败了.其中一个报道
该步骤未生成任何输出.返回值未知.进程退出代码是-1066598274.步骤失败了.
只是想知道是否有其他人已经成功配置他们的服务器,以便能够使用OPENROWSET
XLSX文件,并在同一台服务器上也有SSIS,或者有人知道这种配置是否不可行?
编辑:我应该补充说,失败的包是从SQL代理作业运行的.当我通过SQL Server Management Studio连接到服务器的Integration Services Manager并运行包(通过导航到包,右键单击它并选择Run Package)时,它会成功执行.
我正在使用 ACE OLEDB 将 excel 文件加载到 DataTable 中。
我有一个我需要从文件中获取的列列表(列名)。
问题是我找不到任何关于如何将 Excel 中的特定列导入数据表的工作源。
我有两个彼此无关的程序,但是他们有一个相同的方法,他们尝试从excel文件中读取行.
计划1
public DataTable GetExcelInfo(string filepath)
{
DataTable datatab = new DataTable();
try
{
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT Format([F1], \"#\"), Format([F2], \"#\"), Format([F3], \"#\") FROM [Sheet1$]", conn);
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string[] values = new string[3];
values[0] = reader.GetString(0);
values[1] = reader.GetString(1);
values[2] = reader.GetString(2);
DataRow dr = datatab.NewRow();
dr.ItemArray = values;
datatab.Rows.InsertAt(dr, i);
i++;
}
}
} …
Run Code Online (Sandbox Code Playgroud) 我正在用 C# 编程并使用oledbconnection
. 这是标准的连接字符串,例如
using (OleDbConnection conn = new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
saveFilenameAndLocation +
";Extended Properties='Excel 12.0 Xml;HDR=Yes'"
))
Run Code Online (Sandbox Code Playgroud)
当行数不多时,这会成功并创建包含正确数据的 Excel 电子表格。但是,每当电子表格中的行数增加到很大时(例如,当前它在 166,110 行上失败),它会生成一个空电子表格,其中工作表选项卡名称设置为A266FF2A662E84b639DA
。
不可能重写它以便它不使用OLEDB
连接,任何想法为什么当行大小增加时它不起作用?