我是编程世界的新手,我试图通过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; }
}
我只想在查阅两行或更多行HeaderName
和HeaderValue
时,我可以区分并操纵其中的每一行
它在我的数据库中的样子:
答案 0 :(得分:1)
您正在while循环之外实例化MethodServiceModel
,因此每次将项添加到列表时,您每次都在修改同一个实例。将对象添加到列表时,您将添加引用,而不是副本。
您应该在while循环中移动MethodServiceModel methodService = new MethodServiceModel();
行。