通SqlDataReader对象为参数
我与后续问题: 我有一个返回一个SqlDataReader的方法,然后我做虽然在这个SqlDataReader的,你看到波纹管:通SqlDataReader对象为参数
using (SqlDataReader objSqlDtReader = objDtAccess.GetDataReader())
{
while(objSqlDtReader.Read())
{
UserEntitie objUserEntitie = new UserEntitie();
objUserEntitie.Name = Convert.ToString(objSqlDtReader["name"])
}
}
所以,我需要填写我的所有UserEntite的所有数据,名称,电子邮件,身份证。但是我在用户类中有很多方法(GetUserById,GetUserByEmai,GetAllUsers),我必须再次填充数据。
我需要创建一个私人方法来填充我的UserEntitie,并且在每个方法中我只调用我的方法FillUser并返回它。我认为我需要将我的SqlDataReader传递给我的私有方法FillUser。
任何建议这样做?
你可以做这样的事情:
class UserEntitie
{
internal void FillFromSqlDataReader(SqlDataReader reader)
{
this.Name = Convert.ToString(reader["name"]);
/* Fill your fields */
}
}
用法:
using (SqlDataReader objSqlDtReader = objDtAccess.GetDataReader())
{
while(objSqlDtReader.Read())
{
UserEntitie objUserEntitie = new UserEntitie();
objUserEntitie.FillFromSqlDataReader(objSqlDtReader);
/* Add to a list or something */
}
}
我使用的是类似类型的系统,而是路过SqlDataReader中到私有对象,而不是我将SqlConnection传递到对象中,并拥有执行必要工作的私有方法FillDetailsFromDb()
。
因此,我将有一个无参数构造函数以及一个将SqlConnection作为参数的构造函数,而不是传递一个SqlDataReader。
当我创建对象时,我会传递一个参数(在我的情况下它是一个Guid)到对象中,我的私有方法使用它构造的SqlConnection以及一个新的SqlCommand,它接受我发送的参数公开的方法。
private void FillDetailsFromDb(Guid p)
{
SqlCommand com = new SqlCommand();
com.Connection = conn;
com.CommandText = "spSelectProspectUsingLinkParameter";
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@linkparam", p);
conn.Open();
SqlDataReader rdr = com.ExecuteReader();
...
etc
}
这意味着该对象仍然可以存在,作为一个独立的对象,可以在其他地方使用,SqlDataReader中不必到处传递,其中我发现它不喜欢非常多。顺便说一句,当我自己探索这个问题时,我发现在将数据库中数据类型的数据转换为.Net数据类型时,我很可能会触发奇怪的空值。使用类似下面的代码,我设法避免DBNull数据类型以及利用数据库中的列名称。
if (!rdr.IsDBNull(rdr.GetOrdinal("firstname")))
{
Firstname = rdr.GetString(rdr.GetOrdinal("firstname"));
}
无法得到问题出在哪里。你已经决定要做什么。 – Reniuz