现在需要使用存储过程或得数据库中存储的结果,存储过程如下: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.是存储过程写的不对么,曾经使用存储过程都是得到多个输出参数但这些参数都是一行数据中,返回多行数据输出参数的类型有变化么?
= =! 今天捣鼓了半天也没有什么结果 话说不知不为错 不学才为过 希望有经验的指点下 谢谢了!
@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.是存储过程写的不对么,曾经使用存储过程都是得到多个输出参数但这些参数都是一行数据中,返回多行数据输出参数的类型有变化么?
= =! 今天捣鼓了半天也没有什么结果 话说不知不为错 不学才为过 希望有经验的指点下 谢谢了!
这样不是一条记录那就是见鬼了..ALTER PROCEDURE [dbo].[SelectGameClass]
as
select GameClassName from GameClass
可我是需要将查询结果做为个输出参数@GameClassName返回到程序,这样写得不到输出参数那
LZ想要返回多行,只能返回结果集了..
select * from tb
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这样看看。
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
{
object[] aRecord = new object[dr.FieldCount];
for (int i = 0; i < dr.FieldCount; i++)
{
aRecord[i] = dr[i];
}
list.Add(aRecord);
}
把if 改成while,否则肯定只取一行的值.
dr = db.ExecuteReader(cmd);
调试时候发现dr的数据只有一条,也就是问题出在这句或是这句前
as
select GameClassName from GameClass其实你直接这样就行了干嘛还非得给一个参数呀,那样只能返回一个
存储过程修改为:
ALTER PROCEDURE [dbo].[SelectGameClass]
as
select GameClassName from GameClass
而外面获取使用的是DataSet
另外读取的时候使用了DataSet 使用IDataReader 的话查结果仅为数据库表中的第一条数据