如何在Windows窗体中进行SQL连接?

时间:2015-07-13 16:11:51

标签: c# sqldatareader executereader

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

3 个答案:

答案 0 :(得分:1)

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

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

  

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

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

ADO.NET driver for 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”块中。

此外,如果无法打开连接,则有两种可能:

  1. 您的连接字符串错误;
  2. 您的本地SQL Server不接受来自您的应用程序的连接(配置错误,未运行等);
  3. 两者;
  4. 您可以在这里查看SQL Server的连接字符串:https://www.connectionstrings.com/sql-server-2008/

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