我想测试一下从一个引用我在网上看到的博客的excel文件将数据导入sql,但没有太大成功。
下面是代码;我不确定我到底做错了什么。
function Import-Excel ($FolderPath, $XlsxFile, $Server, $Database, $Table) {
# Create an Excel workbook...
$Excel = New-Object -ComObject Excel.Application;
$Workbook = $Excel.WorkBooks.Open((Join-Path -Path (Convert-Path -Path $FolderPath) -ChildPath $XlsxFile));
$WorkSheet = $Workbook.WorkSheets.Item(1);
$StartRow = 2; # ...ignore headers...
# Insert into a System.Data.DataTable...
$DataTable = New-Object -TypeName System.Data.DataTable;
$null = $DataTable.Columns.Add('PartNum', 'System.String');
$null = $DataTable.Columns.Add('TagNum', 'System.String');
# Load the DataTable...
do {
$PartNum = $WorkSheet.Cells.Item($StartRow, 1).Value();
$TagNum = $WorkSheet.Cells.Item($StartRow, 2).Value();
$Row = $DataTable.NewRow();
$Row.PartNum = $PartNum;
$Row.TagNum = $TagNum;
$DataTable.Rows.Add($Row);
$StartRow++;
} while ($WorkSheet.Cells.Item($StartRow, 1).Value() -ne $null); #...until a gap in values...
$Excel.Quit(); # ...then exit...
# Bulk load it...
$BulkCopy = New-Object -TypeName System.Data.SqlClient.SqlBulkCopy -ArgumentList $ServerConnection;
$SqlConnection.Open();
$BulkCopy.DestinationTableName = $Table;
$BulkCopy.WriteToServer($DataTable);
};
Import-Excel -FolderPath "C:\Users\Aaron\Desktop\" -XlsxFile "TestUpload.xlsx" -Server "TestSVR" -Database "TestDB" $ServerConnection = "Data Source=$Server;Integrated Security=True;Initial Catalog=$Database" -Table "dbo.Tag_Test";
如果需要,我可以求助于使用ssis,但我希望与powershell一起工作。
2条答案
按热度按时间i34xakig1#
一个整洁的powershell发现特性是列出重载定义(方法和/或构造函数的参数)。我没有使用过大容量复制类,您也没有提到实际的错误,但请运行以下命令:
注意:缺少括号。
这将产生如下输出:
这里还记录了bulkcopy类。ms通常不会在powershell中给出示例,但是c#很容易理解,并且经常帮助我解决这样的问题。
我相信这不是你所需要的一切,但如果有用的话请告诉我。
csga3l582#
的初始化
$ServerConnection
缺少变量,似乎为空。无论如何,您可以用不同的方式创建bulko对象:
$BulkCopy = [System.Data.SqlClient.SqlBulkCopy]::new(<arguments>)
.可以使用sqlconnection对象或connectionstring作为参数。如果您需要查看其他构造函数,那么如果您在::之后按ctrl+space并选择带有光标的new(),powershell 7控制台、powershell ise和vscode都将在提示中列出所有可用的构造函数。