我正在运行一个代码,以将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上
答案 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