我知道如何使用connectionstring从数据库中读取值,即
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=10.10.10.10;Initial Catalog=database_name;User Id=$username;Password=$password;"
$SQL = "..."
$conn.Open()
# Create and execute the SQL Query
$cmd = New-Object System.Data.SqlClient.SqlCommand($sql,$conn)
$count=0
do{
try{
$rdr = $cmd.ExecuteReader()
while ($rdr.read()){
$sql_output += ,@($rdr.GetValue(0), $rdr.GetValue(1))
$count=$count + 1
}
$transactionComplete = $true
}
catch{
$transactionComplete = $false
}
}until ($transactionComplete)
# Close the database connection
$conn.Close()
如何使用ODBC完成相同的操作,即我在服务器上设置了DSN(数据源名称)?
答案 0 :(得分:6)
根据https://www.connectionstrings.com/odbc-dsn/,您会使用类似......
的内容DSN=myDsn;Uid=myUsername;Pwd=;
如果不需要信用,可能只能使用DSN=...
。
答案 1 :(得分:2)
如果您的ODBC连接位于用户DSN下但不在系统DSN下,则此方法有效。我找不到一种方法来检查系统DSN连接。
$conn = new-object System.Data.Odbc.OdbcConnection
$conn.connectionstring = "DSN=DSNNAME"
$conn.open()
$cmd = New-object System.Data.Odbc.OdbcCommand($sqlCommand,$conn)
$dataset = New-Object System.Data.DataSet
(New-Object System.Data.Odbc.OdbcDataAdapter($cmd)).Fill($dataSet) | Out- Null
$conn.Close()
答案 2 :(得分:0)
您可能希望将其放在代码之前...
如果要在本地计算机上而不是在SQL Server上下文中进行操作,则可以使用以下内容。这就是我们在公司使用的。
if ($env:Processor_Architecture -ne "x86")
{ write-warning 'Launching x86 PowerShell'
&"$env:windir\syswow64\windowspowershell\v1.0\powershell.exe" -noninteractive -noprofile -file $myinvocation.Mycommand.path -executionpolicy bypass
exit
}
此时始终在32位PowerShell中运行。
$env:Processor_Architecture