web-dev-qa-db-fra.com

Utilisation de SQL Server SMO avec un numéro de port

Dans SSMS Si vous vous connectez à une instance SQL Server définie sur un port spécifique autre que 1433, vous mettez simplement ", numéro de port" après le nom de l'instance. Au même titre si j'utilise System.Data.SqlClient.SqlConnection et voulez peupler un ensemble de données avec System.Data.DataSet, Je ferais la même chose lors de la spécification de la partie source de données de la chaîne de connexion pour passer à cet objet.

N'y a-t-il pas un moyen de faire cela en utilisant Microsoft.SqlServer.Management.Smo.Server classer?

J'ai essayé des variations sans chance comme:


$cnString = "Data Source=Server\instance,port;Initial Catalog=master;Trusted_Connection=true;"
$cn = new-object system.data.sqlclient.sqlconnection($cnstring)
$cnSql = New-Object Microsoft.sqlserver.management.common.serverconnection($cn)
$s = New-Object Microsoft.sqlserver.management.smo.server($cnSql)
$s | Select Name, Version

Ou juste essayer:


$s = New-Object Microsoft.sqlserver.management.smo.server "Server\Instance,port"
$s | Select Name, Version
3
user507

Une chose que vous pourriez faire est de définir la partie ServerConnection Portion de l'objet serveur objet à une chaîne de connexion explicite, spécifiant le nom du port.

Vous pouvez le faire soit en accédant à la propriété Server.ConnectionContext :

$ConnectionString = "data source = yourinstancename,10055; initial catalog = master; trusted_connection = true;"

$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server

$SqlServer.ConnectionContext.ConnectionString = $ConnectionString

$SqlServer.Databases |
    Select-Object Name

Ou en passant l'objet ServerConnection lorsque vous instaniez l'objet Server:

$ConnectionString = "data source = yourinstancename,10055; initial catalog = master; trusted_connection = true;"

$ServerConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection
$ServerConnection.ConnectionString = $ConnectionString

$SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server($ServerConnection)

$SqlServer.Databases |
    Select-Object Name

[~ # ~] éditer [~ # ~] : Je viens de relire votre question, et il semble que l'une de vos tentatives est essentiellement identique à mon deuxième montée en haut. J'ai pris votre code et tout ce que j'ai changé était le data source Portion de votre chaîne de connexion et cela a fonctionné simplement pour moi:

$cnString = "Data Source=Server\instance,port;Initial Catalog=master;Trusted_Connection=true;"
$cn = new-object system.data.sqlclient.sqlconnection($cnstring)
$cnSql = New-Object Microsoft.sqlserver.management.common.serverconnection($cn)
$s = New-Object Microsoft.sqlserver.management.smo.server($cnSql)
$s | Select Name, Version
5
Thomas Stringer

Vous pouvez spécifier TCP/IP comme protocole réseau à l'aide du paramètre de connexion "Bibliothèque de réseau = DBMSSOCN". Ensuite, le port SQL Server indiqué est utilisé:

$cnString = "Data Source=Server\instance,port;Network Library=DBMSSOCN;Initial Catalog=master;Trusted_Connection=true;"

Voici un lien avec des informations supplémentaires: SQLConnection -> Connect via une adresse IP

Cela suppose que vous avez activé les connexions TCP/IP sur SQL Server: Activer le protocole réseau TCP/IP pour SQL Server

0
peterk411