【问题标题】:how to determine if zero records are return in SqlDataAdapter如何确定 SqlDataAdapter 中是否返回零记录
【发布时间】:2009-08-18 07:32:20
【问题描述】:

我有以下代码

  string connString = ConfigurationManager.ConnectionStrings["XXXConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(connString);
        conn.Open();

        SqlDataAdapter SQLDataAdapter1 = new SqlDataAdapter("SELECT * FROM EVENTSignUp WHERE (MembmerEmail = " + userInfo.Email + ")", conn);
        DataTable dtResult1 = new DataTable();
        SQLDataAdapter1.Fill(dtResult1);

但如果没有返回记录,我只是在以下位置得到一个异常:

        SQLDataAdapter1.Fill(dtResult1);

我如何确定此查询是否没有返回记录?

【问题讨论】:

  • 另外,如果您使用此 SQL 字符串,您的电子邮件可能需要在其周围加上引号......
  • 您的 SQL 字符串对 SQL 注入攻击开放。使用参数化查询!

标签: asp.net sqldataadapter


【解决方案1】:
dtResult1.Rows.Count > 0

--编辑

没有关注阅读帖子;请注意,您在 .Fill 上遇到了异常。显然我的代码 sn-p 不会帮助你。正如其他人所问的那样;有什么例外?

--编辑:

而且,正如其他人所指出的,您的查询应采用以下形式:

SqlCommand command = new SqlCommand(@"
select
    *
from
    EVENTSignUp
where
    MemberEmail = @MemberEmail
");

SqlParameter param = new SqlParameter("@MemberEmail", SqlDbType.NVarChar);
param.Value = userInfo.Email;

command.Parameters.Add(param);

SqlDataAdapter dtResult1 = new SqlDataAdapter(command);
DataTable dtResult1 = new DataTable();
SQLDataAdapter1.Fill(dtResult1);

【讨论】:

  • +1 用于给出降低 SQL 注入攻击可能性的答案。
  • 如果我只想检查是否返回了 0 行我不想放入数据表中?
【解决方案2】:

我认为问题不在 SqlDataAdapter 返回的记录中,因为即使它是空的,它也不会产生异常。 查询中的问题,因为电子邮件字段是 varchar,它应该是这样的:

SqlDataAdapter SQLDataAdapter1 = new SqlDataAdapter("SELECT * FROM EVENTSignUp WHERE (MembmerEmail = '" + userInfo.Email + "')", conn);

【讨论】:

  • 同意你的看法。无论如何....参数应该与命令上的参数集合一起传递,以防止sql注入并获得更好的性能。
  • 是的,参数你是对的,应该是通过参数来避免注入,我写得很快就是为了让他知道问题出在哪里。
【解决方案3】:

您也可以使用SqlDataReader 进行检查。这是一个简单的例子来检查SqlDataReader是否有结果:

String con_string = "Your Connection String Here";
String strSQL = "Your Query Here";
using (SqlDataReader objNameDR = SQLHelper.ExecuteReader(con_string, CommandType.Text, strSQL, null)) {

    if (objNameDR.HasRows) {
        // Having Rows
    }
    else{
       // Having No Row (Zero Record)
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2023-03-09
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多