现在需要使用存储过程或得数据库中存储的结果,存储过程如下:ALTER PROCEDURE [dbo].[SelectGameClass] 
@GameClassName varchar(20) output
as
select @GameClassName=GameClassName from GameClass
select @GameClassName查询代码如下:            Database db = CreateConnection(databasename);//自定义方法获得连接对象
            DbCommand cmd = db.GetStoredProcCommand(stroredName, paramValues);//stroredName为存储过程名,paramValues为存储过程需要的参数
            IDataReader dr;
            try
            {
                dr = db.ExecuteReader(cmd); 
            }
            catch
            {
                return null;
            }            List<object[]> list = new List<object[]>();
            if(dr.Read())
            {
                object[] aRecord = new object[dr.FieldCount];
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    aRecord[i] = dr[i];
                }
                list.Add(aRecord);
            }
            dr.Close();
            return list;//最后返回列表现在的问题是:1.在查询多行数据的时候应该使用的方法?ExecuteReader和ExecuteDataSet方法两者试验的结果都是查询到了一条数据,且数据为数据库要查询表中的最后一行数据,是使用的方法不正确么?
2.是存储过程写的不对么,曾经使用存储过程都是得到多个输出参数但这些参数都是一行数据中,返回多行数据输出参数的类型有变化么?
= =! 今天捣鼓了半天也没有什么结果 话说不知不为错 不学才为过 希望有经验的指点下 谢谢了!

解决方案 »

  1.   

     你确定这是你的存储过程??
     这样不是一条记录那就是见鬼了..ALTER PROCEDURE [dbo].[SelectGameClass] 
    as
    select GameClassName from GameClass
      

  2.   

    呃 这么在数据库中查是两条数据
    可我是需要将查询结果做为个输出参数@GameClassName返回到程序,这样写得不到输出参数那
      

  3.   

    输出参数@GameClassName只能返回一个数
    LZ想要返回多行,只能返回结果集了..
    select * from tb
      

  4.   

    1.在查询多行数据的时候应该使用的方法?ExecuteReader和ExecuteDataSet方法两者试验的结果都是查询到了一条数据,且数据为数据库要查询表中的最后一行数据,是使用的方法不正确么?
    2.是存储过程写的不对么,曾经使用存储过程都是得到多个输出参数但这些参数都是一行数据中,返回多行数据输出参数的类型有变化么?你的存储过程这么写的,有问题!:
    ALTER PROCEDURE [dbo].[SelectGameClass] @GameClassName varchar(20) output as select @GameClassName=GameClassName from GameClass select @GameClassNameALTER PROCEDURE [dbo].[SelectGameClass] @GameClassName varchar(20) output as select GameClassName from GameClass这样看看。
      

  5.   

    使用输出参数
    using (SqlConnection sqlCon = new SqlConnection(""))
    {
    sqlCon.Open();
    sqlComm = new SqlCommand("", sqlCon);
    sqlComm.CommandType = CommandType.StoredProcedure;sqlComm.Parameters.Add("@tblName ", SqlDbType.VarChar,200);
    sqlComm.Parameters.Add("@fldName ", SqlDbType.VarChar, 200);
    sqlComm.Parameters.Add("@pageCountint ", SqlDbType.int);
    ...
    sqlComm.Parameters["@pageCountint "].Direction = ParameterDirection.Output;
    sqlComm.Parameters["@tblName "].Value = "";
    sqlComm.Parameters["@fldName "].Value = "";
    ...
    sqlComm.ExecuteNonQuery();
    strng c= sqlComm.Parameters["@pageCountint "].Value.ToString();
    }
    http://topic.csdn.net/u/20091204/21/722689e1-7824-497c-b709-4b1118264633.html
      

  6.   

     if(dr.Read())
                {
                    object[] aRecord = new object[dr.FieldCount];
                    for (int i = 0; i < dr.FieldCount; i++)
                    {
                        aRecord[i] = dr[i];
                    }
                    list.Add(aRecord);
                }
    把if 改成while,否则肯定只取一行的值.
      

  7.   

    这些代码我是想将读取的数据写进一个列表,而查询结果的获取是在
    dr = db.ExecuteReader(cmd); 
    调试时候发现dr的数据只有一条,也就是问题出在这句或是这句前
      

  8.   

    就是把列改成*号呀,还真是快捷呀祝你好运吧ALTER PROCEDURE [dbo].[SelectGameClass] 
    as
    select GameClassName from GameClass其实你直接这样就行了干嘛还非得给一个参数呀,那样只能返回一个
      

  9.   

    哦了 问题解决了
    存储过程修改为:
    ALTER PROCEDURE [dbo].[SelectGameClass]  
    as
    select GameClassName from GameClass
    而外面获取使用的是DataSet
      

  10.   

    恩了 存储过程写的有点问题 因为存储过程使用的不太熟练 有输出的时候总想和输出参数挂钩
    另外读取的时候使用了DataSet 使用IDataReader 的话查结果仅为数据库表中的第一条数据