如何使 SQL 以 Windows 形式连接?

How can I make the SQL connect in a Windows Form?

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

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

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

SqlDataReader dr = com.ExecuteReader();

这是显示的错误:

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll

Additional information: ExecuteReader requires an open and available Connection. The connection's current state is closed.

'System.Data.SqlClient.SqlException' 类型的未处理异常发生在 System.Data.dll

没有捕获的错误:

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

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

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

检查 this link 以获得 SQL 服务器连接字符串的其他变体

需要 'con' 对象工作的每一行代码都应该放在方法的 'try' 块中。

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

  1. 你的连接字符串错误;
  2. 您的本地 SQL 服务器不接受来自您的应用程序的连接(配置错误,不是 运行,等等);
  3. 两者都有;

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

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

您正在尝试使用 SQL 服务器特定 ADO.NET 类 连接到 MySQL 数据库。那不行。

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

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

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

ADO.NET driver for MySQL