C# 如何在传递到wcftestclient时循环datareader?
当我试图从wcf查看数据库中的多行时,我只得到了最后一行 我创建了这个服务C# 如何在传递到wcftestclient时循环datareader?,c#,sql,wcf,loops,datareader,C#,Sql,Wcf,Loops,Datareader,当我试图从wcf查看数据库中的多行时,我只得到了最后一行 我创建了这个服务 public dcTransaction SelectMasterTransaction(DateTime date1, DateTime date2) { dcTransaction dcTrans = new dcTransaction(); string conString = ConfigurationManager.ConnectionStrings["DBCS"].Co
public dcTransaction SelectMasterTransaction(DateTime date1, DateTime date2)
{
dcTransaction dcTrans = new dcTransaction();
string conString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (con = new SqlConnection(conString))
{
SqlCommand cmd = new SqlCommand("spViewMasterTransaction", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterDate1 = new SqlParameter();
parameterDate1.ParameterName = "@date1";
parameterDate1.Value = date1;
cmd.Parameters.Add(parameterDate1);
SqlParameter parameterDate2 = new SqlParameter();
parameterDate2.ParameterName = "@date2";
parameterDate2.Value = date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
SqlDataReader dtReader = cmd.ExecuteReader();
while (dtReader.Read())
{
dcTrans.no_trans = int.Parse(dtReader["no_trans"].ToString());
dcTrans.name = dtReader["name"].ToString();
dcTrans.sum = int.Parse(dtReader["sum"].ToString());
dcTrans.dates = DateTime.Parse(dtReader["dates"].ToString());
}
}
return dcTrans;
}
我在这里得到的是,wcftestclient也只显示我请求的最后一条记录。。
例如:从2010年1月1日到2014年1月1日(sql查询是在我的sql server中的存储过程中编写的)
然后,当我给wcftestclient一个值,从2010年1月1日到2014年1月1日,wcftestclient只返回最后一个日期记录,我想它不会打印循环,我在这里遗漏了什么?我认为WHILE(dataReader.read())已经是循环了,对吗
这是我在sql server中的存储过程
CREATE PROCEDURE spViewMasterTransaksi
@date1 datetime,
@date2 datetime
AS
BEGIN
select * from MasterTransaction WHERE date >= @date1 AND date <= @date2
END
创建过程SPCViewMasterTransaksi
@日期1日期时间,
@日期2日期时间
作为
开始
从MasterTransaction中选择*,其中date>=@date1和date不返回对象列表。您执行循环,但每个项目都会覆盖上一个项目的值
您可以在这里查看yield return
,并返回一个IEnumerable
,或者只做一个经典的列表
,并在循环的每个过程中添加
public IEnumerable<dcTransaction> SelectMasterTransaction(DateTime date1, DateTime date2)
{
string conString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (con = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand("spViewMasterTransaction", con))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterDate1 = new SqlParameter();
parameterDate1.ParameterName = "@date1";
parameterDate1.Value = date1;
cmd.Parameters.Add(parameterDate1);
SqlParameter parameterDate2 = new SqlParameter();
parameterDate2.ParameterName = "@date2";
parameterDate2.Value = date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
using (SqlDataReader dtReader = cmd.ExecuteReader())
{
while (dtReader.Read())
{
dcTransaction dcTrans = new dcTransaction();
dcTrans.no_trans = dtReader.GetInt32(0); // Index for "no_trans"
dcTrans.name = dtReader.GetString(1); // Index for "name"
dcTrans.sum = dtReader.GetInt32(2); // Index for "sum"
dcTrans.dates = dtReader.GetDateTime(3); // Index for "dates"
yield return dcTrans;
}
}
}
}
public IEnumerable SelectMasterTransaction(日期时间日期1、日期时间日期2)
{
string conString=ConfigurationManager.ConnectionString[“DBCS”].ConnectionString;
使用(con=newsqlconnection(consting))
使用(SqlCommand cmd=newsqlcommand(“SPCViewMasterTransaction”,con))
{
cmd.CommandType=CommandType.storedProcess;
SqlParameterDate1=新的SqlParameter();
parameterDate1.ParameterName=“@date1”;
参数date1.Value=date1;
cmd.Parameters.Add(parameterDate1);
SqlParameterDate2=新的SqlParameter();
parameterDate2.ParameterName=“@date2”;
参数date2.Value=date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
使用(SqlDataReader dtReader=cmd.ExecuteReader())
{
while(dtReader.Read())
{
dcTransaction dcTrans=新的dcTransaction();
dcTrans.no_trans=dtReader.GetInt32(0);//用于“no_trans”的索引
dcTrans.name=dtReader.GetString(1);//名称索引
dcTrans.sum=dtReader.GetInt32(2);//用于“sum”的索引
dcTrans.dates=dtReader.GetDateTime(3);//日期索引
收益率;
}
}
}
}
您没有返回对象列表。您执行循环,但每个项目都会覆盖上一个项目的值
您可以在这里查看yield return
,并返回一个IEnumerable
,或者只做一个经典的列表
,并在循环的每个过程中添加
public IEnumerable<dcTransaction> SelectMasterTransaction(DateTime date1, DateTime date2)
{
string conString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (con = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand("spViewMasterTransaction", con))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterDate1 = new SqlParameter();
parameterDate1.ParameterName = "@date1";
parameterDate1.Value = date1;
cmd.Parameters.Add(parameterDate1);
SqlParameter parameterDate2 = new SqlParameter();
parameterDate2.ParameterName = "@date2";
parameterDate2.Value = date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
using (SqlDataReader dtReader = cmd.ExecuteReader())
{
while (dtReader.Read())
{
dcTransaction dcTrans = new dcTransaction();
dcTrans.no_trans = dtReader.GetInt32(0); // Index for "no_trans"
dcTrans.name = dtReader.GetString(1); // Index for "name"
dcTrans.sum = dtReader.GetInt32(2); // Index for "sum"
dcTrans.dates = dtReader.GetDateTime(3); // Index for "dates"
yield return dcTrans;
}
}
}
}
public IEnumerable SelectMasterTransaction(日期时间日期1、日期时间日期2)
{
string conString=ConfigurationManager.ConnectionString[“DBCS”].ConnectionString;
使用(con=newsqlconnection(consting))
使用(SqlCommand cmd=newsqlcommand(“SPCViewMasterTransaction”,con))
{
cmd.CommandType=CommandType.storedProcess;
SqlParameterDate1=新的SqlParameter();
parameterDate1.ParameterName=“@date1”;
参数date1.Value=date1;
cmd.Parameters.Add(parameterDate1);
SqlParameterDate2=新的SqlParameter();
parameterDate2.ParameterName=“@date2”;
参数date2.Value=date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
使用(SqlDataReader dtReader=cmd.ExecuteReader())
{
while(dtReader.Read())
{
dcTransaction dcTrans=新的dcTransaction();
dcTrans.no_trans=dtReader.GetInt32(0);//用于“no_trans”的索引
dcTrans.name=dtReader.GetString(1);//名称索引
dcTrans.sum=dtReader.GetInt32(2);//用于“sum”的索引
dcTrans.dates=dtReader.GetDateTime(3);//日期索引
收益率;
}
}
}
}
您没有返回对象列表。您执行循环,但每个项目都会覆盖上一个项目的值
您可以在这里查看yield return
,并返回一个IEnumerable
,或者只做一个经典的列表
,并在循环的每个过程中添加
public IEnumerable<dcTransaction> SelectMasterTransaction(DateTime date1, DateTime date2)
{
string conString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (con = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand("spViewMasterTransaction", con))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterDate1 = new SqlParameter();
parameterDate1.ParameterName = "@date1";
parameterDate1.Value = date1;
cmd.Parameters.Add(parameterDate1);
SqlParameter parameterDate2 = new SqlParameter();
parameterDate2.ParameterName = "@date2";
parameterDate2.Value = date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
using (SqlDataReader dtReader = cmd.ExecuteReader())
{
while (dtReader.Read())
{
dcTransaction dcTrans = new dcTransaction();
dcTrans.no_trans = dtReader.GetInt32(0); // Index for "no_trans"
dcTrans.name = dtReader.GetString(1); // Index for "name"
dcTrans.sum = dtReader.GetInt32(2); // Index for "sum"
dcTrans.dates = dtReader.GetDateTime(3); // Index for "dates"
yield return dcTrans;
}
}
}
}
public IEnumerable SelectMasterTransaction(日期时间日期1、日期时间日期2)
{
string conString=ConfigurationManager.ConnectionString[“DBCS”].ConnectionString;
使用(con=newsqlconnection(consting))
使用(SqlCommand cmd=newsqlcommand(“SPCViewMasterTransaction”,con))
{
cmd.CommandType=CommandType.storedProcess;
SqlParameterDate1=新的SqlParameter();
parameterDate1.ParameterName=“@date1”;
参数date1.Value=date1;
cmd.Parameters.Add(parameterDate1);
SqlParameterDate2=新的SqlParameter();
parameterDate2.ParameterName=“@date2”;
参数date2.Value=date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
使用(SqlDataReader dtReader=cmd.ExecuteReader())
{
while(dtReader.Read())
{
dcTransaction dcTrans=新的dcTransaction();
dcTrans.no_trans=dtReader.GetInt32(0);//用于“no_trans”的索引
dcTrans.name=dtReader.GetString(1);//名称索引
dcTrans.sum=dtReader.GetInt32(2);//用于“sum”的索引
dcTrans.dates=dtReader.GetDateTime(3);//日期索引
收益率;
}
}
}
}
您没有返回对象列表。您执行循环,但每个项目都会覆盖上一个项目的值
您可以在这里查看yield return
,并返回一个IEnumerable
,或者只做一个经典的列表
,并在循环的每个过程中添加
public IEnumerable<dcTransaction> SelectMasterTransaction(DateTime date1, DateTime date2)
{
string conString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (con = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand("spViewMasterTransaction", con))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter parameterDate1 = new SqlParameter();
parameterDate1.ParameterName = "@date1";
parameterDate1.Value = date1;
cmd.Parameters.Add(parameterDate1);
SqlParameter parameterDate2 = new SqlParameter();
parameterDate2.ParameterName = "@date2";
parameterDate2.Value = date2;
cmd.Parameters.Add(parameterDate2);
con.Open();
using (SqlDataReader dtReader = cmd.ExecuteReader())
{
while (dtReader.Read())
{
dcTransaction dcTrans = new dcTransaction();
dcTrans.no_trans = dtReader.GetInt32(0); // Index for "no_trans"
dcTrans.name = dtReader.GetString(1); // Index for "name"
dcTrans.sum = dtReader.GetInt32(2); // Index for "sum"
dcTrans.dates = dtReader.GetDateTime(3); // Index for "dates"
yield return dcTrans;
}
}
}
}
public IEnumerable SelectMasterTransaction(日期时间日期1、日期时间日期2)
{