public AdminInfo selectAdminByUserName(string userName)
  {
  DataTable dt = new DataTable();
  string strSql = "sp_News_SelectAdminByUserName";
  SqlParameter[] paras = new SqlParameter[]{
  new SqlParameter("@UserName",SqlDbType.NVarChar,20)
  };
  paras[0].Value = userName;
  dt = sqlhelper.ExecuteQuery(strSql, paras, CommandType.StoredProcedure);
  AdminInfo adminInfo = new AdminInfo();
  adminInfo.UserName = userName;
  adminInfo.Pwd = dt.Rows[0]["Pwd"].ToString();
  adminInfo.AdminName = dt.Rows[0]["AdminName"].ToString();
  adminInfo.EMail = dt.Rows[0]["Email"].ToString();
  adminInfo.CreatTime = Convert.ToDateTime(dt.Rows[0]["CreatTime"]);
  adminInfo.LastLoginDate = Convert.ToDateTime(dt.Rows[0]["LastLoginDate"]);
  return adminInfo;
  }
不知道为啥我参数传进去了 单独执行存储过程也没问题
但是执行时总是报错 adminInfo.Pwd = dt.Rows[0]["Pwd"].ToString();在位置0处没有任何行!!别的类里我也是这样写的没问题
不知道出了啥问题撒!!

解决方案 »

  1.   

    返回的 DataTable 无数据!
    --在查询分析器中执行下
    exec sp_News_SelectAdminByUserName
    --@UserName
    ''
      

  2.   

    exec sp_News_SelectAdminByUserName 'abc'有数据的
    但是执行时总是报错 adminInfo.Pwd = dt.Rows[0]["Pwd"].ToString();在位置0处没有任何行!!应该是dt里没数据
    但是我断点跟踪了 dt = sqlhelper.ExecuteQuery(strSql, paras, CommandType.StoredProcedure);
    paras里value有值说明参数传进去了!!
    不知道哪的问题
      

  3.   

    看下sp_News_SelectAdminByUserName和sqlhelper.ExecuteQuery是怎么写的
      

  4.   

    -- =============================================
    -- Description: <通过用户名获取管理员>
    -- =============================================
    ALTER PROCEDURE [dbo].[sp_News_SelectAdminByUserName] 
    @UserName varchar(20)
    AS
    BEGIN
        select * from Admin where UserName=@UserName
    END
     public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType cmdType)
            {
                DataTable dt = new DataTable();
        
                    sqlCmd = new SqlCommand(cmdText, GetConnection());
                    sqlCmd.CommandType = cmdType;
                    sqlCmd.Parameters.AddRange(paras);
                    using (dr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        dt.Load(dr);
                    }
           
                return dt;
            }
      

  5.   

    sqlhelper里面应该没问题啊
    因为我前面几个类都是用的这个方法没什么问题
      

  6.   

    下面这句先改下试试
    paras[0].Value = userName = 'abc';
      

  7.   

    if(dt.Rows.Count>0)
    {}
    select * from Admin where UserName=@UserName
    在查询分析器执行
      

  8.   

    9楼我设断点看了userName=abc的
    10楼什么意思没看懂?
      

  9.   

    编程时判断dt是否有行再做下面的操作。
    if(dt.rows.count>0)
    {
    //go on 
    }
      

  10.   

    存储过程和代码应该都是正确的,问题可能出在其它地方存储过程先改成 select * from Admin 看下有没有数据返回?
    GetConnection返回的连接对吗?