程序通过连接字符串访问sql server数据库,只能用sql native client连接,而不能用ole db provider for sql server连接是怎么回事呢?怎么样设置才能也通过ole db provider for sql server进行连接?
这样能连接:Provider=SQLNCLI.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=CBTest;Data Source=10.27.1.72
换成这样就连接不上:Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=CBTest;Data Source=10.27.1.72
而连接其他服务器上的sql2005数据库,一般两种方式都可以连接。
现在应用程序需要用SQLOLEDB.1这种连接方式。

解决方案 »

  1.   

    exec sp_MSset_oledb_prop
    看看有没有 SQLOLEDB.1 这个接口再说
      

  2.   

    查询结果如下(其他字段都是0),allow_in_process为0代表是没有这个接口还是接口没有打开呢?请大侠进一步赐教,谢谢provider_name allow_in_process
    SQLOLEDB 0
    DTSPackageDSO 0
    SQLReplication.OLEDB 0
    MSOLAP 0
    MSDMine 0
    OraOLEDB.Oracle 0
    ADsDSOObject 1
    SQLNCLI 1
    MSDASQL 1
    Microsoft.Jet.OLEDB.4.0 1
    MSDAOSP 0
    MSDAORA 1
    SQLXMLOLEDB 0
    SQLXMLOLEDB.4.0 0
    MSIDXS 1
      

  3.   

    allow_in_process(允许进程内)
    如果为非零,则 SQL Server 允许将访问接口实例化为进程内服务器。如果未设置此选项,则默认行为是在 SQL Server 进程外实例化访问接口。在 SQL Server 进程外实例化访问接口,可防止 SQL Server 进程在访问接口中出错。在 SQL Server 进程外实例化访问接口时,不允许更新或插入长的引用列(text、ntext 或 image)。接口之间有的会互相冲突的,慢慢调接口参数,我调过Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0之间的冲突,忘了具体过程。SSMS/对象资源管理器/服务器对象/链接服务器/访问接口,这里有界面的调整方式,good luck
      

  4.   

    问题解决了,原来是与安装SQL Server时是否采用默认实例有关。
    如果安装SQL Server时采用默认实例的话,则两种方式都可以连接;而采用命名实例安装时,用ole db provider for sql server就无法访问,不知何故?用命名实例时连接字符串是用 服务器名/实例名 方式访问,但是不成功
      

  5.   

    非默认实例使用ole db provider for sql server链接数据库时,得用“服务器名,port\实例名”来连接
      

  6.   

    谢啦wdmjhy  刚刚解决我的问题