【问题标题】:NHibernate connection string: how to specify port number and server\instance?NHibernate 连接字符串:如何指定端口号和服务器\实例?
【发布时间】:2009-07-27 06:04:34
【问题描述】:

我正在用 NHibernate 2.1 替换我的旧 DAL。我的 NHibernate 配置适用于我的本地开发机器,但不适用于 UAT。 UAT 数据库是在非默认端口上设置的集群。我正在使用类似于以下的标准 NHibernate confie 文件:

<?xml version="1.0" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string">Server=(local);Initial Catalog=dbname;User Id=user;Password=********</property>
    </session-factory>
</hibernate-configuration>

我认为问题在于我在 NHibernate 配置文件中指定连接字符串的方式,因为我现有的 DAL 使用以下连接字符串:

Data Source=uatserver\db01,1433;
        Initial Catalog=dbname;
        User ID=dbuser;
        Password=userpassword

在 NHibernate 配置文件中,我尝试了以下组合,但均未奏效,而且我收到不同的错误消息,但大多数都说无法连接。

<property name="connection.connection_string">
        Server=tcp:(uatserver\db01),1433;
        Initial Catalog=dbname;
        User ID=dbuser;
        Password=userpassword</property>

错误:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP 提供者,错误:0 - 不知道这样的主机。)

<property name="connection.connection_string">
        Server=(uatserver\db01),1433;
        Initial Catalog=dbname;
        User ID=dbuser;
        Password=userpassword</property>

<property name="connection.connection_string">
        Server=uatserver\db01,1433;
        Initial Catalog=dbname;
        User ID=dbuser;
        Password=userpassword</property>

<property name="connection.connection_string">
        Server=(uatserver\db01, 1433);
        Initial Catalog=dbname;
        User ID=dbuser;
        Password=userpassword</property>

这是日志的最后一行:

[27 Jul 2009 18:27] NHibernate.Connection.DriverConnectionProvider
        [DEBUG] Obtaining IDbConnection from Driver

【问题讨论】:

    标签: nhibernate configuration database-connection


    【解决方案1】:

    尝试将服务器部分更改为:

    Server=tcp:(local),12345
    

    (或任何端口号)。您只能为 TCP/IP 连接指定端口。

    【讨论】:

    • @Mitch:tcp 绝对是默认值,而不是共享内存或可用的命名管道吗?我认为这是值得明确的,因为该端口真的应该只在 TCP 上使用。 @Jeffrey:哪个括号?
    • 您是否检查过您的 SQL 服务器是否启用了 TCP/IP?
    • 恐怕那时我会建议深入研究源代码。也许 NHibernate 有一些特殊的转义规则...
    【解决方案2】:

    尝试在单独的属性上传递端口,如下Server=127.0.0.1;Port=3306

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
      <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
      <property name="connection.connection_string">Server=127.0.0.1;Port=3306;Database=test;User ID=admin;Password=admin</property>
      <property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
      <property name="hbm2ddl.auto">update</property>
      <property name="current_session_context_class">web</property>
      <mapping assembly="WebAppTest" />
    </session-factory>
    </hibernate-configuration>
    

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2015-05-03
      • 1970-01-01
      • 2018-03-15
      • 2023-03-09
      相关资源
      最近更新 更多