参数化登录数据库不起作用

时间:2014-02-06 13:49:16

标签: c# sql login

这是我第一次使用面向对象的C#到数据库,因此我尝试使用参数化的SQL-Query登录我的CRM系统。查询检查文本框的“用户名”和“密码”是否与数据库中的任何记录匹配,如果匹配,则填充DataTable仅用于测试目的,以查看是否发生任何事情但是没有发生,Da一直是空的

  1. 这里应该将文本从文本框发送到参数化查询然后再发送到“查询执行方法”的代码

    private void bLoggaIn_Click(object sender, EventArgs e)
    {
        string sql = "SELECT * FROM Anvandare WHERE anvandarnamn = @anvandarnamn AND losenord = @losenord";
    
        SqlCommand sqlCmd = new SqlCommand(sql);
    
        sqlCmd.Parameters.AddWithValue("@anvandarnamn", tbAnvandarnamn.Text.Trim().ToString());
        sqlCmd.Parameters.AddWithValue("@losenord", tbLosenord.Text.Trim().ToString());
    
        clsDB.ReadFromDatabase(sqlCmd);
    }
    
  2. 这是应该对数据库执行查询然后如果没有匹配则返回0的方法,如果匹配则返回1,但是现在,它只填充匹配的DataTable记录,仅用于测试但不起作用,DataTable始终为空,这意味着它没有找到任何匹配。

    public static void ReadFromDatabase(SqlCommand sqlCmd)
    {
        try
        {
            if (!(anslutning.State == ConnectionState.Open)) 
                anslutning.Open();
    
            sqlCmd.Connection = anslutning;
    
            SqlDataAdapter sqlDa = new SqlDataAdapter();
            sqlDa.SelectCommand = sqlCmd;
    
            DataTable dt = new DataTable();
            sqlDa.Fill(dt);
    
            anslutning.Close();
        }
        catch (SqlException undantag)
        {
            string felmeddelande = undantag.Message;
        }
    }
    
  3. 那么为什么它不起作用?我不明白它应该工作还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

您真的想要两次使用文本框tbLosenord吗?

sqlCmd.Parameters.AddWithValue("@anvandarnamn", tbLosenord.Text.Trim().ToString());
sqlCmd.Parameters.AddWithValue("@losenord", tbLosenord.Text.Trim().ToString());

对于这些问题,我设置了一个断点(单击Visual Studio中代码编辑器窗口的左侧)并使用调试器。 MSDN在调试器上有很多tutorials,您可以在YouTube上找到视频,以更友好的方式解释它。