首页 文章

C#SQL Server连接错误号:2,状态:0,类:20

提问于
浏览
0

当尝试连接到本地SQL服务器(MAMP)时,我收到此异常:

抛出异常:System.Data.dll中的'System.Data.SqlClient.SqlException'System.Data.SqlClient.SqlException(0x80131904): Build 与SQL Server的连接时发生与网络相关或特定于实例的错误 . 服务器未找到或无法访问 . 验证实例名称是否正确,以及SQL Server是否配置为允许远程连接 . (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)---> System.ComponentModel.Win32Exception(0x80004005):系统找不到System.Data.SqlClient.SqlInternalConnectionTds指定的文件 . ctor(System.Data.SqlClient.SqlConnectionFactory中的DbConnectionPoolIdentity标识,SqlConnectionString connectionOptions,SqlCredential凭证,Object providerInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool pool,String accessToken,Boolean applyTransientFaultHandling,SqlAuthenticationProviderManager sqlAuthProviderManager) . System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池,DbConnell)中的CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection,DbConnectionOptions userOptions) System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal)上的System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)中的ction owningObject,DbConnectionOptions选项,DbConnectionPoolKey poolKey,DbConnectionOptions(userOptions) oldConnection)在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,Boolean allowCreate,Boolean onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&connection)处于System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry,DbConnectionOptions userOptions) System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource1 retry,DbConnectionOptions),DbConnectionInternal&connection) System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry)上的System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry,DbConnectionOptions userOptions)中的userOptions,DbConnectionInternal oldConnection,DbConnectionInternal&connection) ,System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry)中的System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry)处于System.Data.SqlClient.SqlConnection.Open()的login_page.DatabaseClass.dbRead处的System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry)中的,DbConnectionOptions userOptions) (String sqlQuery)在C:\ Users ****** \ DatabaseClass.cs中:第35行ClientConnectionId:00000000-0000-0000-0000-000000000000错误号:2,状态:0,类:20

这是我用来执行SELECT SQL函数的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace login_page
{
    class DatabaseClass
    {
        public void dbSignIn(String username, String password)
        {
            dbRead("SELECT * FROM user_credentials WHERE username = '" + username + "' AND password = '" + password + "'");
        }

        public void dbRegisterUser()
        {
            dbRead("SQL READ TO DATABASE");
            //dbWrite("SQL WRITE TO DATABASE")
        }

        private void dbRead(String sqlQuery)
        {
            SqlDataReader dataReader;
            SqlCommand command;

            // *** CONNECT TO DATABASE
            Console.WriteLine("** Database Connection: Connecting to database");

            SqlConnection dbConnection = new SqlConnection("User Id=root;" + "Password=root;" + "Server=localhost;" + "Trusted_Connection=true;" + "Database=dbmentum;" + "Connection Timeout=10;");
            try
            {
                dbConnection.Open();
                Console.WriteLine("** Database Connection: Connected to database server");

                // *** READ FROM DATABASE
                command = new SqlCommand(sqlQuery, dbConnection);
                dataReader = command.ExecuteReader();

                while (dataReader.Read())
                {
                    Console.WriteLine(dataReader[0].ToString());    
                    Console.WriteLine(dataReader[1].ToString());
                }

                dataReader.Close();
                command.Dispose();
                dbConnection.Close();
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.ToString());
                MessageBox.Show(e.Message, "Mentum - Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            /*
            // CLOSE DATABASE
            try
            {
                dbConnection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            } */
        }
    }
}

启用所有适当的端口并且数据库详细信息正确

2 回答

  • 2

    你提到了 MAMP ,这是我的理解 MySql server . 尽管如此,您使用 SqlConnectionSqlCommand 用于连接 MS SQL Server . 对于MySql,您需要 MySqlConnectionMySqlCommand 等 .

    正如Prashant Pimpale指出的那样,您观察到的错误与网络连接有关 . 如果是这种情况,您使用MS SQL Server客户端连接到MySQL数据库,原因很明显 . MSSQL默认端口是1433,MySQL默认端口是3306.所以客户端会尝试连接到端口1433,但是没有服务监听 . 因此,无法 Build 连接......

  • 1

    根据错误消息,连接字符串中提供的数据库实例是错误的,无法访问或未配置为允许远程连接(但您使用的是localhost,因此这不是原因)

    MAMP似乎使用MySQL作为数据库 . 请参考MySQL NET Developer Guide了解如何连接到MySQL . 我还建议对SQL注入进行研究,因为你的方法dbSignIn是这类攻击的一个很好的目标 .

相关问题