[英]C# SQL Connection String returning error
嗨,我是新的連接到服務器/數據庫,並想知道為什么這會返回一個錯誤。
我有一個帶數據庫的FastHost服務器。
我剛剛輸入了一個IP示例,但我一直在使用網站控制面板上給出的IP。
private void SQLTest_Click(object sender, RoutedEventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Data Source = 123.456.789.012" +
"Initial Catalog = DiscoverThePlanet" +
"User ID = TestUser" +
"Password = Test";
try
{
conn.Open();
MessageBox.Show("Connection Established!");
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open Connection!");
}
}
這會返回
無法打開Connection!“消息。
我在我的代碼中得到以下顯示: 'System.Data.SqlClient.SqlException'
出現類型'System.Data.SqlClient.SqlException'
的異常,但未在用戶代碼中處理
附加信息:建立與SQL Server的連接時發生與網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱是否正確,以及SQL Server是否配置為允許遠程連接。 (提供者:命名管道提供程序,錯誤:40 - 無法打開與SQL Server的連接)
我知道我的服務器很好,因為我在SQL Server Management studio上連接了它並添加了表和數據。
你錯過了幾個;
conn.ConnectionString =
"Data Source = 123.456.789.012" +
";Initial Catalog = DiscoverThePlanet" +
";User ID = TestUser" +
";Password = Test";
更好的解決方案是使用ConnectionStringBuilder
。
System.Data.SqlClient.SqlConnectionStringBuilder builder =
new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Data Source"] = "123.456.789.012";
builder["Initial Catalog"] = "DiscoverThePlanet";
builder["User ID"] = "TestUser";
builder["Password"] = "Test";
Console.WriteLine(builder.ConnectionString);
或者(如@Fischermaen所述)您可以使用屬性而不是索引。 它更具可讀性!
builder.DataSource = "123.456.789.012";
builder.InitialCatalog = "DiscoverThePlanet";
builder.UserID = "TestUser";
builder.Password = "Test";
此外,在這種情況下,您不使用任何用戶輸入,但在手動創建連接字符串時要注意連接字符串注入 。 ConnectionStringBuilder
可以幫助您避免這些。
當動態字符串連接用於構建基於用戶輸入的連接字符串時,可能會發生連接字符串注入攻擊。 如果未驗證字符串且未轉義惡意文本或字符,則攻擊者可能會訪問服務器上的敏感數據或其他資源。 例如,攻擊者可以通過提供分號並附加其他值來發起攻擊。 使用“last one wins”算法解析連接字符串,並使用惡意輸入替換合法值。
連接字符串構建器類旨在消除猜測並防止語法錯誤和安全漏洞。 它們提供與每個數據提供者允許的已知鍵/值對相對應的方法和屬性。 每個類都維護一個固定的同義詞集合,並且可以從同義詞轉換為相應的眾所周知的鍵名。 對有效的鍵/值對執行檢查,無效的對引發異常。 此外,注入值以安全的方式處理。
最后一個(在我看來,最好的)替代方法是將您的connectionstring從代碼移動到配置中 。 這將使您在不同環境中使用相同代碼變得更加容易。
conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString];
和你的配置。
<connectionStrings>
<add name="MyConnectionString" connectionString="[ConnectionString goes here]" providerName="System.Data.SqlClient" />
</connectionStrings>
在連接字符串代碼的每個部分后添加分號:
private void SQLTest_Click(object sender, RoutedEventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Data Source = 123.456.789.012;" +
"Initial Catalog = DiscoverThePlanet;" +
"User ID = TestUser;" +
"Password = Test";
try
{
conn.Open();
MessageBox.Show("Connection Established!");
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open Connection!");
}
}
https://www.connectionstrings.com/sql-server/應該告訴您有關正確格式的更多信息。
你的連接字符串格式不正確,你忘了一些;
:
"Data Source = 123.456.789.012;Initial Catalog = DiscoverThePlanet;User ID = TestUser;Password = Test"
一個例子 :
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
有一些 ';' 失蹤。 嘗試這個:
conn.ConnectionString =
"Data Source = 123.456.789.012;" +
"Initial Catalog = DiscoverThePlanet;" +
"User ID = TestUser;" +
"Password = Test;";
如果你想像提一樣寫ConnectionString,請使用StringBuilder ,
String對象每次都會占用內存 。
StringBuilder 只占用內存一次 ,因此它會為您提供更好的性能 。
SqlConnection conn = new SqlConnection();
StringBuilder sb=new StringBuilder();
sb.Append("Data Source = 123.456.789.012;");
sb.Append("Initial Catalog = DiscoverThePlanet;");
sb.Append("User ID = TestUser;");
sb.Append("Password = Test;");
conn.ConnectionString =sb.ToString();
try
{
conn.Open();
MessageBox.Show("Connection Established!");
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open Connection!");
}
連接字符串中缺少半列。 所以糾正它
private void SQLTest_Click(object sender, RoutedEventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Data Source = 123.456.789.012;" +
"Initial Catalog = DiscoverThePlanet;" +
"User ID = TestUser;" +
"Password = Test;";
try
{
conn.Open();
MessageBox.Show("Connection Established!");
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show("Can not open Connection!");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.