3

我正在尝试使用 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,但它不起作用。

4

2 回答 2

14

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 的首选方式。(请参阅何时使用 SQL Native Client进行比较)

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

  • ODBC:相对较快并且兼容许多不同的数据库。如果数据库类型将来可能会发生变化,或者您正在访问“外来”数据库,请选择此选项。

  • OLEDB:对于 SQL Server,它相对较慢,会被微软贬值。

然后您必须在SQL Server Authentication (User/Password) 和Windows Authentication之间进行选择。如果可能,我会选择后者。使用 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);
    }
}
于 2013-09-01T20:06:56.953 回答
2

我认为Data Source=*server ip*,*port*;应该是Data Source=*server ip*:*port*;,替换,:. 但是如果端口不是特定的,我认为你并不需要它。另外,您没有定义驱动程序,我不知道没有它就可以工作。

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

于 2013-09-01T20:10:32.357 回答