【问题标题】:Powershell to read from database using ODBC DSN instead of connection stringPowershell使用ODBC DSN而不是连接字符串从数据库中读取
【发布时间】:2018-08-14 22:50:25
【问题描述】:

我知道如何使用连接字符串从数据库中读取值,即

建立数据库连接以读取

$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(数据源名称)?

【问题讨论】:

  • 下面的答案对你有用吗?

标签: powershell odbc dsn


【解决方案1】:

根据https://www.connectionstrings.com/odbc-dsn/,您将使用类似...

DSN=myDsn;Uid=myUsername;Pwd=;

如果不需要凭据,可能只使用DSN=...

【讨论】:

  • @Robino 是的,它有效,即使使用加密的 $password $qt = $ws.QueryTables.Add("ODBC;DSN=$DSN;UID=$username;PWD=$password", $ws.Range("A1"), $SQL1)
  • 这对我来说也不适用于 SqlClient,这适用于 ODBC 连接。使用 SqlClient 我收到以下错误:使用“1”参数调用“.ctor”的异常:“不支持关键字:'dsn'。”
【解决方案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()

【讨论】:

    【解决方案3】:

    你可能想把它放在代码前面...

    如果您想在本地计算机上而不是在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多