2012-01-26 5 views
-3

J'ai développé un programme (C#) qui crée une base de données SQL en utilisant ce code:Comment se connecter à SQL Server par programme en C#?

string SQLCreation = "IF NOT EXISTS (SELECT * FROM master..sysdatabases WHERE Name = 'x') CREATE DATABASE x"; 
SqlConnection PublicSQLDBCreationConnection = new SqlConnection(connectionString); 
SqlCommand PublicSQLDBCreation = new SqlCommand(SQLCreation, PublicSQLDBCreationConnection); 

try 
{ 
    PublicSQLDBCreationConnection.Open(); 
    PublicSQLDBCreation.ExecuteNonQuery(); 
    PublicSQLDBCreationConnection.Close(); 
} 
//'then creates a table and so on 

Maintenant, je veux avoir une application client qui se connecte à cette base de données (via LAN) sans utiliser IP ou le nom de l'ordinateur. Comment est-ce possible? Est-il possible de le faire et d'avoir un jeu de données sans mentionner IP Adr. ou un nom d'ordinateur?


P.S. Ne vous inquiétez pas les gars, j'ai simplifié mon code juste pour votre vue, je me suis assuré que l'injection SQL ou d'autres tentatives n'aura pas lieu. Aussi je dois dire que ma raison de ne pas mentionner servername ou IP est que je veux déployer en masse ma demande sur de nombreux réseaux

+11

Comment le dites-vous où se trouve le serveur? "Tournez à gauche au premier routeur, puis connectez-vous à la troisième prise CAT-5 sur la droite?" – JNK

+2

Que voulez-vous dire par ne pas se connecter sans une adresse IP ou un nom d'hôte? AFAIK vous * devez * avoir un de ceux dans le cadre de la chaîne de connexion. – blowdart

+0

Il n'est pas possible de se connecter directement à la base de données sans spécifier sur quelle machine elle se trouve. Selon vos besoins, vous pourriez faire de l'indirection en utilisant une couche de service ou quelque chose; Quelle est l'exigence/raison pour laquelle vous ne pouvez pas spécifier l'adresse IP ou le nom de l'ordinateur? –

Répondre

1

Vous pouvez utiliser SqlDataSourceEnumerator pour obtenir une liste de tous les serveurs Sql qui sont visibles et explorable. Ce n'est pas une bonne technique, car vous pouvez obtenir une instance sur laquelle vous n'avez pas le droit de créer une base de données, mais vous pouvez toujours essayer quelque chose avec ça.

var enumerator = SqlDataSourceEnumerator.Instance; 
foreach (DataRow row in enumerator.GetDataSources().Rows) 
{ 
    var serverName = row["ServerName"]; 
    var instance = row["InstanceName"]; 

    // build a connection string and try to connect to it 
} 
+1

Bien sûr - mais à la fin, vous utilisez également un nom de serveur - vous n'avez pas à le ** savoir ** à l'avance, vous pouvez le choisir dans une liste - mais vous utilisez toujours le le nom du serveur pour s'y connecter –

+0

Je sais, mais le nom du serveur n'est pas connu de l'utilisateur, donc je pense que c'est ce que demande BShakiba. –

+0

Je pense que cela fera l'affaire. Merci de votre aide – BShakiba

Questions connexes