通过PowerShell操作SQLConnection .NET类


.NET类System.Data.SqlClient.SqlConnection用于建立到SQL Server数据库的连接。用过户可以用这个类通过PowerShell连接到SQL Server,查找数据以及执行存储过程。

下面的例子通过默认实例查询SQL Server版本号

#Let’s set the location to the script folder C:\Scripts

Set-Location C:\Scripts

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = “Server=WIN-SQL;Database=master;IntegratedSecurity=True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = “Select @@version as SQLServerVersion”

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]

执行结果类似于下图所示:

powershellrecevied1

前面的例子中使用了四个类:

System.Data.SqlClient.SqlConnection

System.Data.SqlClient.SqlCommand

System.Data.SqlClient.SqlDataAdapter

System.Data.DataSet

SqlConnection类用于创建针对SQL Server数据库的 连接,SQLCommand类用于对SQL Server数据库创建Transact-SQL语句或存储过程,SQLDataAdapter类用户创建一系列用于填充dataset类的数据命令和数据库连接。数据集代表内存缓存的数据。通常情况下,脚本首先通过WIN-SQL的默认实例创建连接,接下来创建命令对象并设置T-SQL语句”select @@version”,随后创建数据适配器,用SqlCommand获得的结果填充数据集,最后显示数据集。

同样也能用PowerShell通过类似的.NET框架类System.Data.SqlClient.SqlConnection连接到SQL Server命名实例,如下:

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = “Server=WIN-SQL;Database=master;

Integrated Security=True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = “select @@version as SQLServerVersion”

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]

需要强调的是WIN-SQL是主机名。

T-SQL命令”select @@version as SQLServerVersion”的执行结果如下图所示:
powershellrecevied2

用户也块可以用PowerShell通过同名的.NET框架类库System.Data.SqlClient.SqlConnection执行存储过程并通过SQL Server命名实例返回查询结果,代码如下:

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = “Server=WIN-SQL;Database=master; Integrated Security=True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = “sp_who”

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]

能够看到执行存储过程sp_who的执行结果如下图所示:


powershellrecevied3

因为很多时候用户需要知道已安装的SQL Server的版本,下面会创建名为Get-SQLVersion.ps1的脚本,能够用于返回任何SQL Server实例的版本号,以下是脚本的完整代码:

Param (

[string] $SQLSERVER

)

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = “Server=$SQLSERVER;Database=master;Integrated

Security=True”

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = “Select @@version as SQLServerVersion”

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()

$DataSet.Tables[0]

用户可以通过传递SQL Server实例名的方式调用该脚本,如:

.\Get-SQLVersion.ps1 “WIN-SQL”

.\Get-SQLVersion.ps1 “WIN-SQL\SQL2008”

下图是”select @@verson”命令的返回结果:

powershellrecevied4

本文通过SqlConnection这个.NET类连接SQL Server以及访问SQL Server数据库的方法,除此以外还有另外一种方式连接到数据库并获取数据那就是SQL SMO,后续的文章将会详细介绍。

作者: 付海军
版权:本文版权归作者所有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu


发表回复