2016-09-20 3 views
0

일부 코드는 온라인 상태이지만 지금까지는 SQL Server 데이터베이스에 연결할 수 없습니다. 내가 받기를 실행할 때PowerShell을 사용하여 SQL Server를 쿼리하는 방법은 무엇입니까?

$dataSource = “\\SCCM12-01\MSSQLSERVER” 
    $user = “MyID\OurDomain.org” 
    $pwd = “MyPassword” 
    $database = “CM1” 
    $connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;” 

    $connection = New-Object System.Data.SqlClient.SqlConnection 
    $connection.ConnectionString = $connectionString 
    $connection.Open() 

: 다음 PowerShell을 ISE에서이 코드를 실행, 나는 원격 연결을 허용 할 https://blogs.msdn.microsoft.com/walzenbach/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008/

내 방화벽 등으로 포트 1433을 추가 : 나는 편지에이 웹 사이트를 따랐다 다음 오류.

Exception calling "Open" with "0" argument(s): "A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 25 - Connection string is not valid)"

+0

시도 \\하지 않고 : 사용자 ID에 대한 invalid parameter을 가지고있는 것처럼 어쨌든, 그것은 보인다. –

+0

아니, 그 중 하나를 작동하지 않습니다. \\이 오류가 발생하면 제거 : "0"인수가있는 "열기"예외 : "SQL Server에 연결하는 동안 네트워크 관련 또는 인스턴스 관련 오류가 발생했습니다. 서버를 찾을 수 없거나 줄에 : 13 char : 1 (문자열이 유효하지 않습니다.) 공급자 : SQL 네트워크 인터페이스, 오류 : 25 - 연결 문자열이 유효하지 않음 " 않았습니다. 인스턴스 이름이 올바른지 및 SQL Server 원격 연결을 허용하도록 구성되어 있는지 확인하십시오. + $ connection.Open() – mqh7

+1

일반적으로 문제는 아니지만 코드에 많은 "" "'인용 부호가 있습니다. 실제 견적을'''로 바꾸고 변경 사항이 무엇이 있는지 알려주십시오. – Matt

답변

-1

이 작업을 시도 할 수 있습니다 :

param([Int32]$param1=1, [Int32]$param2=2) 

$cn = new-object system.data.SqlClient.SqlConnection("Server=xxxxxxx.database.windows.net;Database=xxxxxx;User ID=xxxxxxxx;Password=xxxxxxxx;Trusted_Connection=False;Encrypt=True"); 

$qMergeScript = "dbo.SPName" 

$sqlcmdMerge = New-Object System.Data.SqlClient.SqlCommand($qMergeScript,$cn); 
$sqlcmdMerge.CommandType = "StoredProcedure"; 
$sqlcmdMerge.CommandTimeout = 0; 

$sqlcmdMerge.Parameters.Add("param1",[System.Data.SqlDbType]::Int) | Out-Null; 
$sqlcmdMerge.Parameters["param1"].Value = $param1; 
$sqlcmdMerge.Parameters.Add("param2",[System.Data.SqlDbType]::Int) | Out-Null; 
$sqlcmdMerge.Parameters["param2"].Value = $param2; 

try 
{ 
    $cn.Open() | Out-Null; 
    $sqlcmdMerge.ExecuteNonQuery() | Out-Null; 
} 
catch [Exception] 
{ 
    $cn.Close()| Out-Null; 
    Write-Host -ForegroundColor DarkRed "Error in Calling SP" 
    throw($_.Exception.Message); 
} 
finally 
{ 
$cn.Close() | Out-Null; 
} 
0

확실하지 왜이 오류를 얻고있다. 당신은 당신이 오류 메시지가 실제로 잘못에 대해 설명이 원 -

function Invoke-SQL { 
    param(
     [string] $dataSource = ".\SQLEXPRESS", 
     [string] $database = "MasterData", 
     [string] $sqlCommand = $(throw "Please specify a query.") 
    ) 

    $connectionString = "Data Source=$dataSource; " + 
      "Integrated Security=SSPI; " + 
      "Initial Catalog=$database" 

    $connection = new-object system.data.SqlClient.SQLConnection($connectionString) 
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection) 
    $connection.Open() 

    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command 
    $dataset = New-Object System.Data.DataSet 
    $adapter.Fill($dataSet) | Out-Null 

    $connection.Close() 
    $dataSet.Tables 
} 
+0

OP가 통합 된 Windows 보안을 기반으로하는 반면 OP는 SQL Server 인증을 사용하려고합니다 (어떤 것이 더 똑똑하지만 요청되는 것은 아닙니다). – vonPryz

0

시도 할 수 있습니다이 링크 https://github.com/Tervis-Tumbler/InvokeSQL

를 참조 할 수 있습니다 : 연결 문자열에 어긋 나서 뭔가가있다

"SQL Network Interfaces, error: 25 - Connection string is not valid".

. 대부분의 세부 사항을 가려서 정확하게 말하기 어렵습니다. 어쩌면 똑똑한 따옴표로 물건을 망칠 수 있을까요? 어쩌면 암호에 인용 문자가있을 수 있습니까?

$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;” 

그래서 같은 User Id 대신 uid 시도

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword; 
관련 문제