连接数据库c#

时间:2013-09-01 20:01:10

标签: c# database database-connection

我正在尝试使用C#连接到服务器上的数据库,但没有运气。

我试过用这个:

public static string m_ConnectionString =
    @"Network Library=dbmssocn; Data Source=*server ip*,*port*; database=*db name*; " +
    @"User id=*db username*; Password=*db pass*;";
public static SqlConnection myConnection = new SqlConnection(m_ConnectionString);

我收到此错误:

  

连接超时已过期。超时时间已过   尝试使用登录前握手确认。这个   可能是因为登录前握手失败或服务器失败了   无法及时回复。尝试时花费的时间   连接到此服务器是 - [预登录]初始化= 9343;   握手= 5654;​​

当我使用myConnection.Open();

我还尝试将超时设置为int.MaxValue,但它不起作用。

2 个答案:

答案 0 :(得分:12)

SQL Server(和许多其他)连接字符串的一个非常好的来源是http://www.connectionstrings.com/sql-server/。根据您是通过ODBC,OLE DB还是Native Client进行连接,您必须选择另一个连接字符串。

尝试

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

有很多选项可供选择,具体取决于确切的SQL Server版本,安全类型等等。


<强>更新

首先,您必须选择数据访问技术。

  • SQL Server的.NET Framework数据提供程序SqlConnection),是从.NET代码访问SQL Server的首选方式。 (参见When to use the SQL Native Client进行比较)

  • Native Client :访问SQL Server并支持新功能是一种非常快捷的方式,因为它直接访问SQL Server TDS协议,适用于非.NET代码。它应该是非.NET代码的首选。

  • ODBC :相对快速且兼容许多不同的数据库。如果数据库类型将来可能会更改,或者您正在访问“异国情调”数据库,请选择此项。

  • OLEDB :对于SQL Server,它相对较慢,并且会被Microsoft折旧。

然后,您必须在 SQL Server身份验证(用户/密码)和 Windows身份验证之间进行选择。如果可能的话我会选择后者。使用Windows身份验证,SQL-Server假定如果您成功登录到Windows,则您是受信任的用户。然后,Windows用户名将1对1映射到SQL-Server用户。当然,该用户仍然必须被授予他将在SQL Server上执行的操作所请求的权限(如SELECT,INSERT,UPDATE,DELETE)。如果DBA没有安装Windows身份验证,则必须使用uid / pwd。

这对我有用:

string connectionString =
    "Data Source=192.168.123.45;Initial Catalog=MyDatabase;Integrated Security=SSPI;";
using (SqlConnection connection = new SqlConnection(connectionString)) {
    using (SqlCommand command = new SqlCommand(
                 "SELECT Region FROM dbo.tlkpRegion WHERE RegionID=30", connection)) {
        connection.Open();
        string result = (string)command.ExecuteScalar();
        MessageBox.Show("Region = " + result);
    }
}

答案 1 :(得分:1)

我认为Data Source=*server ip*,*port*;应为Data Source=*server ip*:*port*;,将,替换为:。但如果端口不具体,我认为你真的不需要它。你也没有定义一个驱动程序,我不知道它没有它就可以工作。

也是一个建议:查找LINQ to SQLADO.NET Entity Data Model。这些可以真正简化数据库的使用并使用LINQ,您可以在代码中编写一个与sql非常类似的查询,Visual Studio也可以帮助智能感知,因此您不必记住所有的表名和列名。