我构建了一个简单的C#应用程序,该应用程序使用OLEDB提供程序连接到SQL SERVER(2012)。此代码可在1台计算机上运行,但在另一台计算机上则无效。
目标-SQL Server 2012
使用的连接字符串-数据源= SERVER_NAME;初始目录= DATABASE_NAME;提供程序= SQLOLEDB.1;用户ID = USER_ID;密码= PWD;自动翻译= False;应用程序名称= APPLICATION_FRIENDLY_NAME;大小= 32767;
代码运行时-.NET运行时4.5.2
1)Windows Server 2008 R2 Enerprise 64位-该代码在此计算机上有效 2)Windows Server 2008 R2 Enerprise 64位-此代码不适用于该代码
服务器版本没有差异。我怀疑它与某些防火墙或端口设置或计算机级别的内容有关。
我尝试在Windows 10计算机上运行相同的代码,但失败了。
在所有情况下,如果使用的是SQLOLEDB,则错误消息都是
Error-System.Data.OleDb.OleDbException:[DBNETLIB] [ConnectionOpen(SECDoClientHandshake())。] SSL安全错误。 无效的连接字符串属性
我已经尝试了各种链接,还安装了https://support.microsoft.com/en-us/help/3135244/tls-1-2-support-for-microsoft-sql-server
所述的SQL Server 2012 Native Client工具。static void Main(string[] args)
{
try
{
OleDbConnection con = new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["connectionstring"].ToString());
OleDbCommand com = new OleDbCommand(System.Configuration.ConfigurationSettings.AppSettings["commandtext"].ToString(), con);
com.CommandType = System.Data.CommandType.StoredProcedure;
OleDbDataAdapter ad = new OleDbDataAdapter(com.CommandText, con);
System.Data.DataSet ds = new System.Data.DataSet();
con.Open();
ad.Fill(ds);
Console.WriteLine("total records returned=" + ds.Tables[0].Rows.Count.ToString());
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Error-" + ex.GetBaseException().ToString());
Console.ReadLine();
}
}
配置文件具有:-
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="connectionstring" value="Data Source=SERVER_NAME;Initial Catalog=DATABASE_NAME;Provider=SQLOLEDB.1;User Id=USER_ID;Password=PWD;Auto Translate=False;Application Name=APPLICATION_FRIENDLY_NAME;Size=32767;"/>
<add key="commandtext" value="STORE_PROCEDURE_NAME"/>
</appSettings>
<startup>
<supportedRuntime version="v2.0.50727"/></startup>
</configuration>
期望很简单。代码和所使用的查询,返回X行数。该测试全部关于能够连接到目标sql服务器。这是在一台计算机上运行,而不是在其他任何计算机上运行。