如何修改与ACCESS数据库一起使用的代码以与SQL数据库一起使用

时间:2019-09-27 16:28:27

标签: sql powershell

我正在运行一个代码,以将CSV文件导入Access数据库。但是,现在我可以访问SQL Server,并希望在可能的情况下使用相同的代码,但不知道要进行哪些更改以适应代码

我有一组正在运行的代码,它使用我添加参数的连接字符串,并且可以正常工作。

$connectionString="Provider=Microsoft.Ace.OLEDB.12.0; Data Source=$inputDatabase" 
 $conn = New-Object System.Data.OleDb.OleDbConnection($connectionString)
 $conn.Open()
 $cmd = $Conn.CreateCommand()

 $cmd.CommandText = "INSERT INTO [Tabl1]([date],[zone],[location],[Plugin ID],[CVE],[CVSS],[Risk],[Host],[Protocol],[Port],[Name])
         VALUES(@date, @zone, @location, @PluginID, @CVE, @CVSS, @Risk,@Host,@Protocol,@Port,@Name)"```

        [void]$cmd.Parameters.Add('@date',      [System.Data.OleDb.OleDbType]::DateTime)
        [void]$cmd.Parameters.Add('@zone',      [System.Data.OleDb.OleDbType]::VarChar)
上面的两个代码片段都显示了如何设置连接字符串,并简要说明了如何使用相应的变量类型设置2个值,但这并不是完整的代码。但是我知道需要更改片段才能使其与SQL Server一起使用,主要问题是我不知道要与SQL Server一起使用哪个$ connectionstring,或者例如我该如何做才能使数据源指向SQL服务器的网络地址,并使用Windows身份验证。

在第二个代码段中,我使用哪种类型的格式,我知道变量类型,但我假设如果我从ace.oledb.12更改,则应该更改oldebtype段。 SQL服务器在SQL 13.0.5426上

1 个答案:

答案 0 :(得分:1)

您需要更新您的连接字符串。假设您正在使用Windows身份验证:

$ConnectionString = 'Data Source={0};Initial Catalog={1};Integrated Security=SSPI' -f $ServerInstanceName, $DatabaseName

您应该使用内置的SQL Server客户端类System.Net.SqlClient而不是OLEDB类。

$conn = New-Object System.Data.SqlClient.SqlConnection $connectionString

您将要更新参数类型:

[void]$cmd.Parameters.Add('@date',      [System.Data.SqlDbType]::DateTime)
[void]$cmd.Parameters.Add('@zone',      [System.Data.SqlDbType]::VarChar)

其他所有内容都应大致相同。


以下是一个有效的PowerShell脚本,该脚本可连接到SQL Server数据库,获取数据并填充数据表:

$SqlQuery = 'SELECT * FROM Student WHERE Student_Id = @student_id'
$ConnectionString = 'Data Source={0};Initial Catalog={1};Integrated Security=True' -f $SqlServer, $Database

$SqlConnection = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList $ConnectionString
$SqlCommand = New-Object -TypeName System.Data.SqlClient.SqlCommand -ArgumentList $SqlQuery, $SqlConnection
$SqlCommand.Parameters.Add('@student_id', [System.Data.SqlDbType]::VarChar, 10).Value = $Student_Id

$DataTable = New-Object -TypeName System.Data.DataTable -ArgumentList 'Student'

try {
    $SqlConnection.Open()
    $SqlDataReader = $SqlCommand.ExecuteReader()
    $DataTable.Load($SqlDataReader)
}
finally {
    $SqlConnection.Close()
}
$DataTable