2012-07-06 74 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

相关问题