web-dev-qa-db-ja.com

接続文字列の代わりにODBC DSN)を使用してデータベースから読み取るPowershell

接続文字列を使用してデータベースから値を読み取る方法を知っています。

読み取るデータベース接続を確立する

$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(データソース名)を設定しますか?

5
Glowie

https://www.connectionstrings.com/odbc-dsn/ によると、次のようなものを使用します...

DSN=myDsn;Uid=myUsername;Pwd=;

Credsが必要ない場合は、おそらくDSN=...を使用できます。

6
andyb

これは、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
Iconiu

これをコードの前に置くことをお勧めします...

SQLサーバーのコンテキストではなく、ローカルマシンで実行する場合は、次を使用します。それは私たちが私の会社で使用しているものです。

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
0
Cary