首页 > 解决方案 > SQL Server 连接错误号:2,状态:0,类:20

问题描述

当尝试连接到本地 SQL 服务器 (MAMP) 时,我遇到了这个异常:

抛出异常:System.Data.dll System.Data.SqlClient.SqlException (0x80131904) 中的“System.Data.SqlClient.SqlException”:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception (0x80004005):系统找不到在 System.Data.SqlClient.SqlInternalConnectionTds 指定的文件。 ctor(DbConnectionPoolIdentity 身份,SqlConnectionString 连接选项,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSourceSystem.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection externalConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1次重试, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& 连接) 在 System.Data.SqlClient.SqlConnection.TryOpenInner (TaskCompletionSource 1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 次重试) ) 在 C:\Users******\DatabaseClass.cs:line 35 ClientConnectionId:00000000-0000-0000-0000 中 login_page.DatabaseClass.dbRead(String sqlQuery) 的 System.Data.SqlClient.SqlConnection.Open() -000000000000 错误号:2,状态:0,类:20

这是我用来执行SELECTSQL 函数的类

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());
            } */
        }
    }
}

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

标签: c#sql-server

解决方案


您提到了MAMP,在我的理解中是MySql 服务器。尽管如此,您正在使用SqlConnection并且SqlCommand用于连接到MS SQL Server。对于 MySql,您需要一个MySqlConnectionMySqlCommand依此类推。

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


推荐阅读