【问题标题】:Trying to connect to MySQL server: A network-related or instance-specific error occurred while establishing a connection to SQL Server尝试连接到 MySQL 服务器:建立与 SQL Server 的连接时发生网络相关或特定于实例的错误
【发布时间】:2018-05-31 05:19:06
【问题描述】:

我想连接到 MySQL 服务器,但正如错误提示的那样,我的程序正在尝试连接到 SQL Server。如何更改它连接到 MySQL?我也在使用 NHibernate 进行映射。这应该是一个问题吗?我安装了 MySQL 连接器,并添加了 MySQL.Data 和 MySql.Web 作为引用,但没有更改任何内容。

这是我的课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using NHibernate;
using NHibernate.Cfg;

namespace ConsoleApp1
{
    class Program
    {
        public void testMethod()
        {
            Configuration config = new Configuration();
            config.Configure();

            ISessionFactory factory = config.BuildSessionFactory();
            ISession session = factory.OpenSession();
            ITransaction tx = session.BeginTransaction();

            User u = new User();
            u.Name = "AAA";
            u.Password = "BBB";

            session.Save(u);
            tx.Commit();

            session.Close();
        }

        static void Main(string[] args)
        {
            Program p = new Program();
            p.testMethod();
        }
    }
}

这是完整的堆栈跟踪:

Unhandled Exception: System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception: The system cannot find the file specified
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at NHibernate.Connection.DriverConnectionProvider.GetConnection()
   at NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare()
   at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(Dialect dialect, IConnectionHelper connectionHelper)
   at NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactoryImplementor sessionFactory)
   at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
   at NHibernate.Cfg.Configuration.BuildSessionFactory()
   at ConsoleApp1.Program.testMethod() in C:\Users\Stark\Documents\Visual Studio Projects\ConsoleApp1\ConsoleApp1\ConsoleApp1\Program.cs:line 19
   at ConsoleApp1.Program.Main(String[] args) in C:\Users\Stark\Documents\Visual Studio Projects\ConsoleApp1\ConsoleApp1\ConsoleApp1\Program.cs:line 36

还有,休眠配置文件:

  <session-factory name="Test">
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=localhost;DataBase=assignment_4;uid=root;pwd=1234</property>

    <property name="show_sql">true</property>

    <mapping assembly="ConsoleApp1" />
  </session-factory>

</hibernate-configuration>

【问题讨论】:

  • System.Data.SqlClient.SqlException 注意到这一行了吗?这是 Sql Server 类引发的异常,因此在您的配置中的某处,您未能指明用于 MySql 的正确类
  • "NHibernate.Dialect.MsSql2008Dialect" 和 "NHibernate.Driver.SqlClientDriver" 如果您尝试使用 MySql,肯定看起来不正确 - 相当肯定后者应该是 NHibernate.Driver.MySqlDataDriver
  • 建议在所有凭据上加星标 (***),你永远不知道你留下了什么。
  • @Tatranskymedved 我会记住的。 ;)

标签: c# mysql nhibernate


【解决方案1】:

您必须更改配置中的详细信息才能使用正确的驱动程序:

<property name="connection.driver_class">
    NHibernate.Driver.MySqlDataDriver
</property>

一些例子可以在这里找到:https://www.codeproject.com/Articles/26123/NHibernate-and-MySQL-A-simple-example

【讨论】:

  • 非常感谢。问题是我遵循了一个连接到 SQL Server 而不是 MySQL 的教程。祝你有美好的一天!
猜你喜欢
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多