2012-01-26 60 views
-3

我開發了一個程序(C#),這將創建使用此代碼SQL數據庫:如何以編程方式在C#中連接到SQL Server?

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 

現在我想如果沒有使用IP或計算機名,其連接到這個數據庫(通過LAN)的客戶端應用程序。這怎麼可能?有沒有可能做到這一點,並有一個數據集,而不提及IP Adr。或計算機名稱?


P.S.別擔心,我爲了您的觀點簡化了我的代碼,我確信SQL注入或其他嘗試不會發生。 此外,我不得不說,我沒有提及服務器名或IP原因是,我想在很多網絡

+11

你如何知道服務器在哪? 「在第一臺路由器左轉,然後連接右側的第三個CAT-5插孔?」 – JNK

+2

你的意思是沒有IP或主機名而不連接? AFAIK你*必須*具有其中的一個作爲連接字符串的一部分。 – blowdart

+0

不能直接連接到數據庫而不指定它所在的機器。根據您的要求,您可以使用服務層或其他方式進行間接尋址;什麼是您不能指定IP或計算機名稱的要求/原因? –

回答

1

你可以使用SqlDataSourceEnumerator來獲取可見和可瀏覽所有的SQL服務器的列表大規模部署應用。這不是一個好技術,因爲你可能會得到一個你無權創建數據庫的實例,但你仍然可以嘗試一些。

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

當然 - 但最終,您還使用服務器名稱 - 您不必提前**知道**,您可以從列表中選擇它 - 但您仍然在使用服務器的名稱連接到它 –

+0

我知道,但服務器名稱是不知道的用戶,所以我雖然這可能是BShakiba要求。 –

+0

我認爲這將完成這項工作。謝謝你的幫助 – BShakiba