A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋兴征 中级黑马   /  2013-3-30 12:32  /  1467 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋兴征 于 2013-3-30 22:50 编辑

在做搜索功能时,SqlDataAdapter填充DataSet对象ds,但是发现ds.Tables[0].Rows.Count=0
也就是没有返回结果,但是sql语句在Management Studio中执行没错。
请大家帮忙看下!
搜索按钮的点击事件:
  1. protected void imgBtn_Search_Click(object sender, ImageClickEventArgs e)
  2.         {
  3.             List<string> listWhere = new List<string>();
  4.             List<SqlParameter> parameters = new List<SqlParameter>();
  5.             if (ddlModule.SelectedIndex >= 0)
  6.             {
  7.                 int pid = Convert.ToInt32(ddlModule.SelectedValue);
  8.                 listWhere.Add("pid=@pid");
  9.                 parameters.Add(new SqlParameter("@pid", pid));
  10.             }
  11.             if (txtRight.Text.Length > 0)
  12.             {
  13.                 string rightName = txtRight.Text;
  14.                 listWhere.Add("Name like @Name");
  15.                 parameters.Add(new SqlParameter("@Name", "'%"+rightName+"%'")); //这里字符串的拼接有问题没有?
  16.             }
  17.             string str = string.Join(" and ", listWhere);  //每个搜索条件以and分割开
  18.             string sql = "select * from T_Right";
  19.             if (listWhere.Count > 0)
  20.             {
  21.                 sql = sql + " where " + str;
  22.             }
  23.             DataTable dt = SQLHelper.ExecuteDataTable(sql, parameters.ToArray());
  24.             int rows = dt.Rows.Count; //rows=0,实在不明白
  25.             List<Right> list = new List<Right>();
  26.             if (dt.Rows.Count > 0)
  27.             {
  28.                 foreach (DataRow row in dt.Rows)
  29.                 {
  30.                     list.Add(new RightDAL().ToModel(row));
  31.                 }
  32.                 repRightList.DataSource = list;
  33.                 repRightList.DataBind();
  34.             }            
  35.         }
复制代码
SQLHelper中的ExecuteDataTable方法:
  1. public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
  2.         {
  3.             using (SqlConnection conn = new SqlConnection(connStr))
  4.             {
  5.                 conn.Open();
  6.                 using (SqlCommand cmd = conn.CreateCommand())
  7.                 {
  8.                     cmd.CommandText = sql;
  9.                     cmd.Parameters.AddRange(parameters);
  10.                     DataSet ds = new DataSet();
  11.                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  12.                     adapter.Fill(ds);
  13.                     return ds.Tables[0];
  14.                 }
  15.             }
  16.         }
复制代码


评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

4 个回复

倒序浏览
打断点才清楚些,这样看代码有点头大
回复 使用道具 举报
以下代码中,把单引号去掉就行了,因为系统会自动补上单引号:
parameters.Add(new SqlParameter("@Name", "'%"+rightName+"%'"));
回复 使用道具 举报
guobin_lu 发表于 2013-3-30 12:41
打断点才清楚些,这样看代码有点头大

好的,下次我会注意这点的,谢谢你!
回复 使用道具 举报
DWC_5101 发表于 2013-3-30 14:08
以下代码中,把单引号去掉就行了,因为系统会自动补上单引号:
parameters.Add(new SqlParameter("@Name",  ...

多谢!问题解决!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马