4

我想从我的 ASP.NET 应用程序中使用 SQL Server 本机客户端连接到 SQL Server 2012。目前,我有一个现有的连接字符串使用 odbc 连接并且工作正常。

<appSettings>
    <add key="StagingConnect" 
         value="Integrated Security=True;Initial Catalog=Staging;Data Source=AUBDSG01.AUYA.NET\INST1"/>
</appSettings>

当我尝试如下时,代码引发异常

<add key="StagingConnect"  
     value="Provider=SQLNCLI11;Integrated Security=True;Initial Catalog=Staging;Data Source=AUBDSG01.AUYA.NET\INST1"/>

例外:

System.Web.HttpUnhandledException (0x80004005):引发了“System.Web.HttpUnhandledException”类型的异常。

System.ArgumentException:不支持关键字:“提供者”。
在 System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
在 System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)
在 System. Data.SqlClient.SqlConnectionString..ctor(String connectionString)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
在 System.Data.ProviderBase.DbConnectionFactory

如何修改此连接字符串,使其应通过 SQL Server 本机客户端 11 进行连接

4

7 回答 7

3

不知道你之前是如何工作的,因为我的连接字符串没有<appSettings>放在单独的<connectionStrings>部分中。providerName 是一个元素,而不是字符串本身的一部分。

这是一个例子

  <connectionStrings>
    <clear />
    <add name="xxx" providerName="System.Data.SqlClient" connectionString="Server=(local);Database=yyy;User=zzz;Password=123;MultipleActiveResultSets=True" />
  </connectionStrings>

希望这可以帮助。

于 2018-02-16T12:27:19.557 回答
2

第一个连接字符串不是 ODBC 连接字符串,它是 SqlClient 连接字符串。

第二个连接字符串是使用 SQL Server Native Client 的 Ole Db 连接字符串。但是您的堆栈跟踪显示您正在使用 SqlClient 连接到 SQL Server。

您不能同时使用 SqlClient 和 SQL Native 客户端连接到 SQL Server。要使用 Native Client,您有两种选择:

您可以按照以下 Microsoft 支持文章使用 SqlClient 和 TLS1.2:

于 2018-02-27T15:17:23.153 回答
1

我认为您的连接问题是您在使用 Windows 身份验证时无法远程连接到 SQL

你可以这样尝试:

<appSettings>
<add key="StagingConnect" 
     value="data source=AUBDSG01.AUYA.NET\INST1;initial catalog=Staging;persist security info=True;user id=username;password=password;MultipleActiveResultSets=True"/></appSettings>
于 2018-03-03T10:42:58.127 回答
1

删除连接字符串的 Provider=SQLNCLI11 部分——它不是受支持的属性,并且是不必要的。

参考:MSDN

于 2018-03-02T17:55:55.873 回答
0

如果您使用的是 SqlConnection,请使用提供程序名称“System.Data.SqlClient”,但如果您想使用其他提供程序

SqlConnection

<add key="StagingConnect" 
         value="Integrated Security=True;Initial Catalog=SampleDatabase;Data Source=."/>

OleDbConnection

 <add key="StagingConnect2" 
         value="Provider=SQLNCLI11;Server=.;Database=SampleDatabase;
Trusted_Connection=yes;"/>

odbc连接

 <add key="StagingConnect3" 
         value="Driver={SQL Server Native Client 11.0};Server=.;
Database=SampleDatabase;Trusted_Connection=yes;"/>

我测试了所有这些并且工作正常。我希望这会有所帮助

于 2018-03-02T18:16:54.380 回答
0

你可以在你的 web.config 中测试它。这需要显示的用户名和密码。不过,我不确定您将如何使用连接字符串。如果使用的帐户具有访问权限,这应该可以工作。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

</configSections>
<connectionStrings>
    <add name="StagingConnect" connectionString="data source=AUBDSG01.AUYA.NET\INST1;initial catalog=Staging;persist security info=True;user id=user;password=password" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
于 2018-02-28T16:09:50.607 回答
0

根据 MSDN 使用Database.OpenConnectionString Method (String, String)

var connectionString = "Data Source=.\\SQLExpress;Initial Catalog=SmallBakery;Integrated Security=True";

var providerName = "System.Data.SqlClient";

var db = Database.OpenConnectionString(connectionString, providerName);

var selectQueryString = "SELECT * FROM Product ORDER BY Name";

将此设置添加到web.config

<add name="ConnString" connectionString="Password=Secret;Persist Security Info=True;
     User ID=MyUserID;Initial Catalog=SmallBakery;Data Source=.\\SQLExpress" 
     providerName="System.Data.SqlClient" />
于 2018-02-26T15:20:37.533 回答