使用PowerShell连接到SQL Server数据库

50

我已经在网上搜索了一段时间,发现了许多类似的问题,但由于某些原因,我似乎无法使其正常工作。

我只是想连接到SQL服务器数据库并将查询结果输出到文件中-请参见下面的PowerShell脚本。我不确定的是如何将用户ID和密码集成到连接字符串中。

$SQLServer = "aaaa.database.windows.net"
$SQLDBName = "Database"
$uid ="john"
$pwd = "pwd123"
$SqlQuery = "SELECT * from table;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

$DataSet.Tables[0] | out-file "C:\Scripts\xxxx.csv"

收到以下错误信息:

使用“1”个参数调用“Fill”时出现异常:“此版本的 SQL Server 不支持 Windows 登录。”


你正在运行哪个版本的SQL? - ne1410s
SQL Server Management Studio 2012 - Johnathan
你是否正在尝试连接到 SQL Azure 实例? - nabrond
1
SQL Server Management Studio 2012不是"SQL的一个版本" - 它是一个可以连接和管理SQL Server的应用程序,可以连接到2000年(可能更早)至2014年的任何SQL Server版本。 - alroc
SQL的版本... SQL 2000... SQL 2012... 不相关,但感谢您的评论。 - William Lee
显示剩余3条评论
8个回答

37

综合安全用户ID\密码身份验证是互斥的。若要作为运行代码的用户连接到 SQL Server,请从您的连接字符串中删除用户ID密码:

$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;"

要使用特定凭据进行连接,请删除Integrated Security

$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; User ID = $uid; Password = $pwd;"

21

在连接字符串中将“Integrated Security”更改为false。

您可以通过使用您拥有的用户名/密码打开SQL管理工具并查看是否可以从那里连接/打开数据库来检查/验证此问题。注意!这也可能是防火墙问题。


9
# database Intraction

$SQLServer = "YourServerName" #use Server\Instance for named SQL instances!
$SQLDBName = "YourDBName"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; 
User ID= YourUserID; Password= YourPassword" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = 'StoredProcName'
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet) 
$SqlConnection.Close() 

#End :database Intraction
clear

3
以下是Windows身份验证的答案:
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLServer;Database=$SQLDBName;Integrated Security=True;"

2
假设你可以使用综合安全性,那么你可以删除用户名和密码:
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;"

1

要作为活动目录用户连接到 SQL Server,只需以活动目录用户身份启动 PowerShell,并使用 TrustedSecurity=true 连接到 SQL Server。


0

我已删除集成安全性...我的目标是使用带有活动目录用户名/密码的连接字符串登录到SQL服务器。但每次尝试都失败了,不管格式如何... sam company\user ... upn whatever@company.com ...基本用户名。


-1

我认为只有在特定用户明确设置为使用 SQL 服务器数据库上的密码登录时,才能起作用,即不从集成的 Windows/单点登录继承凭据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接