2012-07-06 22 views
-1

我無法在下面的代碼中找到錯誤。當我使用SQLDataSource連接我的數據庫時,沒有錯誤。但是,如果我嘗試寫入自定義代碼中使用相同的連接字符串的SqlDataSource用於連接數據庫時,我遇到這樣的錯誤:無法通過自定義代碼使用相同的連接字符串連接到數據庫sqldatasource使用

(provider:命名管道提供程序,error:40 - 無法打開到SQL Server的連接)

我猜想在我的代碼中沒有錯誤,但是在SQL 2008 Express的配置設置中。

在此先感謝...

SqlConnection sqlcon = new SqlConnection(); 
    sqlcon.ConnectionString = "Data Source=ERHANEMREEROGLU/SQLEXPRESS;Initial Catalog=KET;Integrated Security=True"; 
    sqlcon.Open(); 

    SqlCommand sqlcmd = new SqlCommand(); 
    sqlcmd.Connection=sqlcon; 
    sqlcmd.CommandText = "SELECT * FROM Login"; 
    sqlcmd.CommandType = CommandType.Text; 

    sqlcmd.ExecuteNonQuery(); 

    sqlcon.Close(); 
+0

參考這篇文章。 http://stackoverflow.com/questions/11350983/unable-to-connect-to-sql-server-2008-in-net – 2012-07-06 09:25:51

回答

1

不應該這樣讀:

sqlcon.ConnectionString = "Data Source=ERHANEMREEROGLU\\SQLEXPRESS;Initial Catalog=KET;Integrated Security=True";  
+0

謝謝@凱爾,你有解決方案... – 2012-07-06 11:15:57

+1

我會在6小時後發佈答案,因爲我是新的堆棧溢出網站,再次感謝... – 2012-07-06 11:17:01

0

您正在執行ExecuteNonQuery();這是插入/更新/刪除語句。您可以使用ExecuteReader或使用SQLDataAdapter填充DataReader或數據集/數據表。

SqlDataReader reader = sqlcmd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      Console.WriteLine(String.Format("{0}", reader[0])); 
     } 

你可以試試:

using (SqlConnection sqlcon = new SqlConnection(
     "Data Source=ERHANEMREEROGLU\\SQLEXPRESS;Initial Catalog=KET;Integrated Security=True")) 
     { 
     sqlcon.Open(); 
     using (SqlDataAdapter a = new SqlDataAdapter("SELECT * FROM Login", sqlcon)) 
     { 
      DataTable t = new DataTable(); 
      a.Fill(t); 
     } 
     } 
+0

沒有方法sqlcmd.ExecuteyQuery(); – 2012-07-06 09:30:32

+0

@Asif,你是正確的,它的sqlcmd.ExecuteReader – Habib 2012-07-06 09:32:11

+0

我剛剛發佈的錯誤發生的地方。我有以下在我的項目中寫下相同的代碼,但問題是在建立connection.Debug無法達到與數據適配器和gridview等... – 2012-07-06 09:38:47

0

有問題是在聲明中sqlcmd.ExecuteNonQuery();

SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Login", sqlcmd))    
DataTable t = new DataTable(); 
adapter.Fill(t); 

Actualy您正在執行一個查詢,你需要e ither SqlDataReaderSqlDataAdapter這裏。

0

您應該將線路改由:

sqlcmd.ExecuteNonQuery(); 

到:

SqlDataReader dr = sqlcmd.ExecuteReader(); 
+0

爲什麼downvote?沒有方法作爲SqlCommand中的ExceuteQuery()。sqlcmd.ExecuteQuery()將不會編譯。 – 2012-07-06 09:34:58

+0

感謝您的更新。@Asif – 2012-07-06 09:36:30

0

嘗試檢查,如果您的SQL服務器允許遠程連接,您可以設置在SQL Server配置管理

然後啓用遠程TCP連接

+0

o k,我嘗試了...但是你能猜到SQLDataSource如何連接到數據庫,即使我有配置問題 – 2012-07-06 09:46:17

0

如果您使用Windows Aut在您的SQL數據庫上驗證身份,您可能需要將集成安全性更改爲SSPI?雖然我不太確定。 - 編輯閱讀關於此的一些信息,SSPI等同於True,因此請參閱下面的建議。

sqlcon.ConnectionString = "Data Source=ERHANEMREEROGLU/SQLEXPRESS;Initial Catalog=KET;Integrated Security=SSPI"; 

但是,正如John Blade所說,您可能還需要在配置管理器中檢查它是否接受遠程連接。

另外請確保您已將Windows用戶添加到數據庫。您可以通過使用SQL Mangement Studio工具來完成此操作。

+0

好吧,我嘗試了......但是你能猜到SQLDataSource如何連接到數據庫,即使我有問題配置 – 2012-07-06 09:46:50

+0

我不知道你爲什麼能夠與sqldatasource但不能與你的代碼。呃,你也可以檢查防火牆設置。這個網站有一組很好的屏幕打印和檢查到數據庫的連接的說明。 http://blog.sqlauthority.com/2009/05/21/sql-server-fix-error-provider-named-pipes-provider-error-40-could-not-open-a-connection-to-sql- server-microsoft-sql-server-error/ – 2012-07-06 10:10:49

+0

我不知道這是否是解決方案,但可以嘗試將連接字符串放入SqlConnection變量中嗎? sqlcon.ConnectionString =「Data Source = ERHANEMREEROGLU/SQLEXPRESS; Initial Catalog = KET; Integrated Security = True」; SqlConnection sqlcon = new SqlConnection(sqlcon.ConnectionString); – 2012-07-06 10:26:24

相關問題