C# 如何在传递到wcftestclient时循环datareader?

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

当我试图从wcf查看数据库中的多行时,我只得到了最后一行

我创建了这个服务

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)
{