当尝试连接到本地SQL Server(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。 ) 在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 userOptions) 在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,仅布尔值OneCheckConnection,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, TaskCompletionSource
1重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal&连接)处 在System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal处(DbConnection externalConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource
1重试,DbConnectionOptions userOptions) 在System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource
1重试) 在System.Data.SqlClient.SqlConnection.Open() 在C:\ Users ****** \ DatabaseClass.cs:第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());
} */
}
}
}
所有适当的端口均已启用,并且数据库详细信息正确
答案 0 :(得分:2)
您提到了 MAMP ,据我了解,这是 MySql服务器。但是,您正在使用SqlConnection
和SqlCommand
来连接到 MS SQL Server 。对于MySql,您需要MySqlConnection
,MySqlCommand
等。
正如Prashant Pimpale指出的那样,您观察到的错误与网络连接有关。如果是这种情况,则使用MS SQL Server客户端连接到MySQL数据库,原因很明显。 MSSQL的默认端口是1433,MySQL的默认端口是3306。因此,客户端将尝试连接到端口1433,但是没有服务监听。因此,无法建立连接...
答案 1 :(得分:1)
根据错误消息,连接字符串中提供的数据库实例错误,不可访问或未配置为允许远程连接(但是您使用的是localhost,所以这不是原因)
MAMP似乎使用MySQL作为数据库。请参阅MySQL NET Developer Guide以了解如何连接到MySQL。 我还建议对SQL注入进行研究,因为您的方法dbSignIn是此类攻击的理想目标。