【问题标题】:Not getting any row data from database using c# asp.net.没有使用 c#asp.net 从数据库中获取任何行数据。
【发布时间】:2015-10-05 15:06:17
【问题描述】:

我无法使用 c#asp.net 从数据库中获取任何行数据。我正在尝试从我的数据库中获取一行数据,但它没有返回任何行。我为此使用 3 轮胎架构,我正在解释下面是我的代码。

index.aspx.cs:

protected void userLogin_Click(object sender, EventArgs e)
        {
            if (loginemail.Text.Trim().Length > 0 && loginpass.Text.Trim().Length >= 6)
            {
                objUserBO.email_id = loginemail.Text.Trim();
                objUserBO.password = loginpass.Text.Trim();
                DataTable dt= objUserBL.getUserDetails(objUserBO);
                Response.Write(dt.Rows.Count);
            }
        }

userBL.cs:

 public DataTable getUserDetails(userBO objUserBO)
        {
           userDL objUserDL = new userDL();
            try
            {
                DataTable dt = objUserDL.getUserDetails(objUserBO);
                return dt;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

userDL.cs:

public DataTable getUserDetails(userBO objUserBO)
        {
            SqlConnection con = new SqlConnection(CmVar.convar);
            try
            {
                con.Open();
                DataTable dt = new DataTable();
                string sql = "SELECT  * from T_User_Master WHERE User_Email_ID= ' " + objUserBO.email_id + "'";
                SqlCommand cmd = new SqlCommand(sql, con);
                SqlDataAdapter objadp = new SqlDataAdapter(cmd);
                objadp.Fill(dt);
                con.Close();
                return dt;
            }
            catch(Exception e)
            {
                throw e;
            }
        }

当我检查Response.Write(dt.Rows.Count); 的输出时,它显示0。所以请帮我解决这个问题。

【问题讨论】:

  • 分析您的数据库调用,可能您的跟踪会揭示问题
  • 首先,一个问题——User_Email_ID 一定会存储电子邮件地址吗?
  • @Infer-On:你能编辑答案吗?
  • @AdrianWragg:是的,我的数据库中有字段名称User_Email_ID。
  • 其次,警告。您将用户生成的文本直接传递给数据库调用,从而使自己面临 SQL 注入攻击。 '; drop table T_User_Master; -- 的用户名可能会清除您的用户表。

标签: c# asp.net 3-tier


【解决方案1】:

您的查询字符串在' 和" 标记之间似乎有一个多余的空格。当您的电子邮件在前面占据空间时,这可能会导致所有麻烦。

使用SqlConnection.Parameters 属性将参数添加到查询中会更好。

string sql = "SELECT * from T_User_Master WHERE User_Email_ID=@userID";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.Add("@userID", SqlDbType.NVarChar);
cmd.Parameters["@userID"].Value = objUserBO.email_id;

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 2019-10-12
    • 1970-01-01
    • 2016-09-14
    • 2022-12-26
    • 2021-08-31
    • 1970-01-01
    • 2012-08-04
    • 2021-01-17
    相关资源
    最近更新 更多