【发布时间】:2018-12-15 21:30:50
【问题描述】:
当尝试连接到本地 SQL 服务器 (MAMP) 时,我遇到了这个异常:
抛出异常:System.Data.dll 中的“System.Data.SqlClient.SqlException” System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception (0x80004005):系统找不到指定的文件 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 身份,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool 池,字符串 accessToken,布尔 applyTransientFaultHandling,SqlAuthenticationProviderManager sqlAuthProviderManager ) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey,DbConnectionOptions 用户选项) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection) 在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection) 在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,布尔allowCreate,布尔onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal& 连接) 在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource
1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接) 在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions) 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试) 在 System.Data.SqlClient.SqlConnection.Open() 在 C:\Users******\DatabaseClass.cs:line 35 中的 login_page.DatabaseClass.dbRead(String sqlQuery) 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());
} */
}
}
}
所有适当的端口都已启用,并且数据库详细信息正确。
【问题讨论】:
-
连接字符串的连接背后有什么特殊原因吗?
-
N 错误是:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。
-
确认连接字符串对错!
-
在 Web 配置中定义您的连接字符串,例如:
-
字符串是正确的,如果我不连接我该如何处理呢?
标签: c# sql-server