我还在处理我的信使程序,它会更安全,但我只是测试一些东西。我有一个登录表单,用于连接到SQL数据库,我现在用本地SQL设置它,因为我试图让它工作(它仍然无法工作)而我只是想知道我做错了什么。
private void button1_Click(object sender, EventArgs e)
{
LoginInfo.un = textBox1.Text;
LoginInfo.pw = textBox2.Text;
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=localhost:3306; User Id=PXgamer;Password=Password1; Initial Catalog=login;";
try
{
con.Open();
}
catch (Exception)
{
MessageBox.Show("Error with the database connection");
}
string qry1 = "Select * from login where Password=@Password and Username=@Username";
SqlCommand com = new SqlCommand(qry1, con);
com.Parameters.AddWithValue("@Username", LoginInfo.un);
com.Parameters.AddWithValue("@Password", LoginInfo.pw);
SqlDataReader dr = com.ExecuteReader();
while (dr.Read())
{
if (dr.HasRows == true)
{
MessageBox.Show("Login Successful", "Login Information");
}
}
if (dr.HasRows == false)
{
MessageBox.Show("Access Denied", "Login Information");
}
this.Hide();
var frmMain = new frmMain();
frmMain.Closed += (s, args) => this.Close();
frmMain.Show();
}
这样我的代码,连接首先挂起,然后是#34;数据库连接错误"出现错误。我试着查看它,但它表示当连接没有打开时。很明显,我猜测连接字符串有问题。
在调试中,这是突出显示的部分:
SqlDataReader dr = com.ExecuteReader();
这是显示的错误:
未处理的类型' System.InvalidOperationException'发生在System.Data.dll
中其他信息:ExecuteReader需要一个开放且可用的连接。连接的当前状态已关闭。
类型' System.Data.SqlClient.SqlException'未处理的异常发生在System.Data.dll
中没有捕获的错误:
其他信息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供者:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)
答案 0 :(得分:1)
您正在尝试使用特定于SQL Server的ADO.NET类连接到MySQL数据库。那不会起作用。
您可以看到当前代码正在尝试从您收到的错误消息连接到SQL Server实例:
其他信息:与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,并将 SQL Server 配置为允许远程连接。 (提供商:命名管道提供商,错误:40 - 无法打开与 SQL Server的连接 的连接)
您需要下载特定于MySQL的驱动程序以连接到MySQL,然后使用它。
答案 1 :(得分:0)
从连接字符串中丢失端口(:3306
)应该可以正常工作。如果SQL Server不在默认端口上,请指定如下(使用逗号,而不是冒号)
Data Source=server.ip.address,1433; Initial Catalog=myDataBase;
User ID=myUsername; Password=myPassword;
检查this link以获取SQL Server连接字符串的其他变体
答案 2 :(得分:0)
需要“con”对象工作的每一行代码都应该保留在方法的“try”块中。
此外,如果无法打开连接,则有两种可能:
您可以在这里查看SQL Server的连接字符串:https://www.connectionstrings.com/sql-server-2008/
最后......在末尾使用'finally'块来表示'con.Close()'。