powershell-找不到system.data.sqlclient.sqlbulkcopy的适当构造函数

bjp0bcyl  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(573)

我想测试一下从一个引用我在网上看到的博客的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一起工作。

i34xakig

i34xakig1#

一个整洁的powershell发现特性是列出重载定义(方法和/或构造函数的参数)。我没有使用过大容量复制类,您也没有提到实际的错误,但请运行以下命令:

[System.Data.SqlClient.SqlBulkCopy]::new

注意:缺少括号。
这将产生如下输出:

OverloadDefinitions
-------------------
System.Data.SqlClient.SqlBulkCopy new(System.Data.SqlClient.SqlConnection connection)
System.Data.SqlClient.SqlBulkCopy new(System.Data.SqlClient.SqlConnection connection, System.Data.SqlClient.SqlBulkCopyOptions copyOptions, System.Data.SqlClient.SqlTransaction externalTransaction)
System.Data.SqlClient.SqlBulkCopy new(string connectionString)
System.Data.SqlClient.SqlBulkCopy new(string connectionString, System.Data.SqlClient.SqlBulkCopyOptions copyOptions)

这里还记录了bulkcopy类。ms通常不会在powershell中给出示例,但是c#很容易理解,并且经常帮助我解决这样的问题。
我相信这不是你所需要的一切,但如果有用的话请告诉我。

csga3l58

csga3l582#

的初始化 $ServerConnection 缺少变量,似乎为空。
无论如何,您可以用不同的方式创建bulko对象: $BulkCopy = [System.Data.SqlClient.SqlBulkCopy]::new(<arguments>) .
可以使用sqlconnection对象或connectionstring作为参数。如果您需要查看其他构造函数,那么如果您在::之后按ctrl+space并选择带有光标的new(),powershell 7控制台、powershell ise和vscode都将在提示中列出所有可用的构造函数。

相关问题