0

我仍在开发我的信使程序,它会更安全,但我只是在测试东西。我有一个登录表单,用于连接到 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();
    }

这就是我的代码,首先连接挂起,然后出现“数据库连接错误”错误。我试着查了一下,但它说是连接没有打开的时候。所以很明显我猜是连接字符串有问题。

在调试中,这是突出显示的部分:

SqlDataReader dr = com.ExecuteReader();

这是显示的错误:

System.Data.dll 中出现“System.InvalidOperationException”类型的未处理异常

附加信息:ExecuteReader 需要一个打开且可用的连接。连接的当前状态为关闭。

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

没有捕获的错误:

附加信息:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)

4

3 回答 3

1

您正在尝试使用特定于 SQL Server 的 ADO.NET 类连接到 MySQL 数据库。那是行不通的。

您可以从收到的错误消息中看到您当前的代码正在尝试连接到 SQL Server 实例:

附加信息:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及SQL Server是否配置为允许远程连接。(提供者:命名管道提供者,错误:40 - 无法打开与SQL Server的连接)

您需要下载 MySQL 特定的驱动程序以连接到 MySQL,然后使用它。

MySQL 的 ADO.NET 驱动程序

于 2015-07-13T16:41:11.783 回答
0

:3306从连接字符串中丢失端口 ( ) 应该可以正常工作。如果 SQL Server 不在默认端口上,请指定如下(使用逗号,而不是冒号)

Data Source=server.ip.address,1433; Initial Catalog=myDataBase; 
User ID=myUsername; Password=myPassword;

检查此链接以获取 SQL Server 连接字符串的其他变体

于 2015-07-13T16:24:52.317 回答
0

需要“con”对象工作的每一行代码都应该保留在方法的“try”块内。

另外,如果打不开连接,有两种可能:

  1. 您的连接字符串错误;
  2. 您的本地 SQL Server 不接受来自您的应用程序的连接(配置错误、未运行等);
  3. 两个都;

您可以在此处查看 SQL Server 的连接字符串:https ://www.connectionstrings.com/sql-server-2008/

最后...在“con.Close()”的末尾使用“finally”块。

于 2015-07-13T16:31:26.477 回答