使用 .NET 连接字符串连接到远程 SQL Anywhere 12 数据库

Connecting to a remote SQL Anywhere 12 database with .NET connection string

我很难使用 .NET 连接字符串连接到 SQL Anywhere 12 数据库。

我正在使用以下查询字符串:

Data Source=xxx.xxx.xxx.xxx,yyyy; Initial Catalog={MyDatabaseName}; User ID={MyUsername}; Password={MyPassword}

(其中 xxx.xxx.xxx.xxx = 远程服务器的 IP 地址,yyyy 是所需的端口)

我正在尝试 运行 使用以下代码来测试我的连接:

private const string connectionString = "{MyQueryString}";
private const string testQuery = "{ATestSelectQuery}";


using (SqlConnection conn = new SqlConnection(connectionString))
{
    ExecuteNonQuery(conn, testQuery);
}


static void ExecuteNonQuery(SqlConnection conn, string query)
{
    try
    {
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            cmd.CommandText = query;
            cmd.CommandType = CommandType.Text;
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("ERROR: {0}", ex.Message);
    }
}

但是,当我 运行 收到以下错误消息时:

ERROR: A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)

您的代码看起来像是在尝试连接到 Microsoft SQL 服务器,而不是 SQLAnywhere 12 服务器。 SqlConnection、SqlCommand 等仅适用于 Microsoft SQL 服务器。 SQLAnywhere 12 的 .NET 客户端对象是 SAConnection、SACommand 等

您需要确保安装了正确的 SQLAnywhere .NET 客户端文件。如果您不知道或不确定,请下载 SQL Anywhere Developer Edition。这是免费的。客户端版本 12-17 将连接到您的版本 12 服务器。请注意 SQLAnywhere 的连接字符串与 MS SQL 服务器的连接字符串非常不同。