如何将SqlDataReader值复制到数组

时间:2017-06-01 16:57:25

标签: c# tsql

我是编程世界的新手,我试图通过SqlDataReader捕获数据库的所有值并执行得很好,直到某些部分,问题是数据库发送多行时的问题。返回第二行会更改第一行中的所有数据。

这是我的代码

public List<MethodServiceModel> QueryMethod(int idMethod)
{
        List<MethodServiceModel> list = new List<MethodServiceModel>();

        try
        {
            using (var conn = new NpgsqlConnection(connstring))
            {
                conn.Open();
                NpgsqlTransaction tran = conn.BeginTransaction();

                // Retrieve all rows
                var cmd = new NpgsqlCommand("\"integrador\".\"GET_METODO_SERVICIO\"", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue(":id_metodo", idMethod);

                using (var reader = cmd.ExecuteReader())
                {
                    int count = 0;
                    MethodServiceModel methodService = new MethodServiceModel();
                    while (reader.Read())
                    {                          
                        methodService.NameService = reader["NOMBRE"].ToString();
                        methodService.Url = reader["URL_SERVICIO_WEB"].ToString();
                        methodService.HeaderName = reader["NOMBRE_ENCABEZADO"].ToString();
                        methodService.HeaderValue = reader["VALOR"].ToString();
                        methodService.PeriodicityId = Convert.ToDecimal(reader["VALOR_PEROPDICIDAD"]);                      
                        list.Add(methodService);
                    }

                    reader.Close();
                }                   

                tran.Commit();
                conn.Close();

                return list;
            }                
        }
        catch (Exception)
        {
        }

        return list;
    }

这是我的模特课:

public class MethodServiceModel
{
    public string NameService { get; set; }
    public string Url { get; set; }
    public string HeaderName { get; set; }
    public string HeaderValue { get; set; }
    public decimal PeriodicityId { get; set; }
}

我只想在查阅两行或更多行HeaderNameHeaderValue时,我可以区分并操纵其中的每一行

它在我的数据库中的样子:

enter image description here

1 个答案:

答案 0 :(得分:1)

您正在while循环之外实例化MethodServiceModel,因此每次将项添加到列表时,您每次都在修改同一个实例。将对象添加到列表时,您将添加引用,而不是副本。

您应该在while循环中移动MethodServiceModel methodService = new MethodServiceModel();行。