您的位置:首页 > 运维架构 > Shell

通过PowerShell操作SQLConnection .NET类

2010-06-09 16:26 253 查看
.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]

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



前面的例子中使用了四个类:
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”的执行结果如下图所示:



用户也块可以用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的执行结果如下图所示:



因为很多时候用户需要知道已安装的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”命令的返回结果:



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

作者: 付海军
出处:http://fuhj02.blog.51cto.com
版权:本文版权归作者和51cto共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息