C# .NET数据层线程安全
我正在处理我的数据层,并采取了一种稍微不同的方法,以下是我的许多数据访问对象之一:C# .NET数据层线程安全,c#,.net,ado.net,C#,.net,Ado.net,我正在处理我的数据层,并采取了一种稍微不同的方法,以下是我的许多数据访问对象之一: class OwnerDaoImpl : IOwnerDao { private const string ID_COLUMN = "Id"; private const string USERNAME_COLUMN = "Username"; private const string PASSWORD_COLUMN = "Password"; private const stri
class OwnerDaoImpl : IOwnerDao
{
private const string ID_COLUMN = "Id";
private const string USERNAME_COLUMN = "Username";
private const string PASSWORD_COLUMN = "Password";
private const string NAME_COLUMN = "Name";
private const string LAST_NAME_COLUMN = "LastName";
private const string BIRTHDATE_COLUMN = "BirthDate";
private const string DNI_COLUMN = "DNI";
private const string EMAIL_COLUMN = "EMail";
private const string ADDRESS_COLUMN = "Address";
private const string PHONE_COLUMN = "PhoneNumber";
private const string PROFILE_PIC_COLUMN = "ProfilePicture";
private const string DISTRICT_ID_COLUMN = "DistrictId";
private const string ID_PARAM = "@id";
private const string USERNAME_PARAM = "@user";
private const string PASSWORD_PARAM = "@pass";
private const string NAME_PARAM = "@name";
private const string LAST_NAME_PARAM = "@lastName";
private const string BIRTHDATE_PARAM = "@birthDate";
private const string DNI_PARAM = "@dni";
private const string EMAIL_PARAM = "@email";
private const string ADDRESS_PARAM = "@address";
private const string PHONE_PARAM = "@phoneNum";
private const string PROFILE_PIC_PARAM = "@profilePic";
private const string DISTRICT_ID_PARAM = "@disId";
private const string ROW_COUNT_PARAM = "@rowCount";
IDatabase db;
IDbCommand cmd;
IDataReader dr;
public OwnerDaoImpl()
{
db = DatabaseFactory.GetSqlDatabase();
}
public int Insert(Owner toInsert, IDbConnection conn)
{
using (cmd = db.GetStoredProcedureCommand(USP_OWNER_INSERT, conn))
{
cmd.Parameters.Add(db.GetParameter(USERNAME_PARAM, DaoUtil.ValueOrDbNull(toInsert.Username)));
cmd.Parameters.Add(db.GetParameter(PASSWORD_PARAM, DaoUtil.ValueOrDbNull(toInsert.Password)));
cmd.Parameters.Add(db.GetParameter(NAME_PARAM, DaoUtil.ValueOrDbNull(toInsert.Name)));
cmd.Parameters.Add(db.GetParameter(LAST_NAME_PARAM, DaoUtil.ValueOrDbNull(toInsert.LastName)));
cmd.Parameters.Add(db.GetParameter(BIRTHDATE_PARAM, DaoUtil.ValueOrDbNull(toInsert.BirthDate)));
cmd.Parameters.Add(db.GetParameter(DNI_PARAM, DaoUtil.ValueOrDbNull(toInsert.DNI)));
cmd.Parameters.Add(db.GetParameter(EMAIL_PARAM, DaoUtil.ValueOrDbNull(toInsert.EMail)));
cmd.Parameters.Add(db.GetParameter(ADDRESS_PARAM, DaoUtil.ValueOrDbNull(toInsert.Address)));
cmd.Parameters.Add(db.GetParameter(PHONE_PARAM, DaoUtil.ValueOrDbNull(toInsert.PhoneNumber)));
cmd.Parameters.Add(db.GetParameter(PROFILE_PIC_PARAM, DaoUtil.ValueOrDbNull(toInsert.ProfilePicture)));
cmd.Parameters.Add(db.GetParameter(DISTRICT_ID_PARAM, DaoUtil.ValueOrDbNull(toInsert.DistrictId)));
cmd.Parameters.Add(db.GetOutputParameter(ID_PARAM, SqlDbType.Int));
cmd.ExecuteNonQuery();
return (int)((IDataParameter)cmd.Parameters[ID_PARAM]).Value;
}
}
public bool Update(Owner toUpdate, IDbConnection conn)
{
using (cmd = db.GetStoredProcedureCommand(USP_OWNER_UPDATE, conn))
{
cmd.Parameters.Add(db.GetParameter(ID_PARAM, DaoUtil.ValueOrDbNull(toUpdate.Id)));
cmd.Parameters.Add(db.GetParameter(USERNAME_PARAM, DaoUtil.ValueOrDbNull(toUpdate.Username)));
cmd.Parameters.Add(db.GetParameter(PASSWORD_PARAM, DaoUtil.ValueOrDbNull(toUpdate.Password)));
cmd.Parameters.Add(db.GetParameter(NAME_PARAM, DaoUtil.ValueOrDbNull(toUpdate.Name)));
cmd.Parameters.Add(db.GetParameter(LAST_NAME_PARAM, DaoUtil.ValueOrDbNull(toUpdate.LastName)));
cmd.Parameters.Add(db.GetParameter(BIRTHDATE_PARAM, DaoUtil.ValueOrDbNull(toUpdate.BirthDate)));
cmd.Parameters.Add(db.GetParameter(DNI_PARAM, DaoUtil.ValueOrDbNull(toUpdate.DNI)));
cmd.Parameters.Add(db.GetParameter(EMAIL_PARAM, DaoUtil.ValueOrDbNull(toUpdate.EMail)));
cmd.Parameters.Add(db.GetParameter(ADDRESS_PARAM, DaoUtil.ValueOrDbNull(toUpdate.Address)));
cmd.Parameters.Add(db.GetParameter(PHONE_PARAM, DaoUtil.ValueOrDbNull(toUpdate.PhoneNumber)));
cmd.Parameters.Add(db.GetParameter(PROFILE_PIC_PARAM, DaoUtil.ValueOrDbNull(toUpdate.ProfilePicture)));
cmd.Parameters.Add(db.GetParameter(DISTRICT_ID_PARAM, DaoUtil.ValueOrDbNull(toUpdate.DistrictId)));
cmd.Parameters.Add(db.GetOutputParameter(ROW_COUNT_PARAM, SqlDbType.Int));
cmd.ExecuteNonQuery();
return (int)((IDataParameter)cmd.Parameters[ROW_COUNT_PARAM]).Value > 0;
}
}
public bool Delete(object id, IDbConnection conn)
{
using (cmd = db.GetStoredProcedureCommand(USP_OWNER_DELETE, conn))
{
cmd.Parameters.Add(db.GetParameter(ID_PARAM, DaoUtil.ValueOrDbNull(id)));
cmd.Parameters.Add(db.GetOutputParameter(ROW_COUNT_PARAM, SqlDbType.Int));
cmd.ExecuteNonQuery();
return (int)((IDataParameter)cmd.Parameters[ROW_COUNT_PARAM]).Value > 0;
}
}
public Owner Find(object id, IDbConnection conn)
{
using (cmd = db.GetStoredProcedureCommand(USP_OWNER_FIND, conn))
{
cmd.Parameters.Add(db.GetParameter(ID_PARAM, DaoUtil.ValueOrDbNull(id)));
using (dr = cmd.ExecuteReader())
{
int ID_COLUMN_INDEX = dr.GetOrdinal(ID_COLUMN);
int USERNAME_COLUMN_INDEX = dr.GetOrdinal(USERNAME_COLUMN);
int PASSWORD_COLUMN_INDEX = dr.GetOrdinal(PASSWORD_COLUMN);
int NAME_COLUMN_INDEX = dr.GetOrdinal(NAME_COLUMN);
int LAST_NAME_COLUMN_INDEX = dr.GetOrdinal(LAST_NAME_COLUMN);
int BIRTHDATE_COLUMN_INDEX = dr.GetOrdinal(BIRTHDATE_COLUMN);
int DNI_COLUMN_INDEX = dr.GetOrdinal(DNI_COLUMN);
int EMAIL_COLUMN_INDEX = dr.GetOrdinal(EMAIL_COLUMN);
int ADDRESS_COLUMN_INDEX = dr.GetOrdinal(ADDRESS_COLUMN);
int PHONE_COLUMN_INDEX = dr.GetOrdinal(PHONE_COLUMN);
int PROFILE_PIC_COLUMN_INDEX = dr.GetOrdinal(PROFILE_PIC_COLUMN);
int DISTRICT_ID_COLUMN_INDEX = dr.GetOrdinal(DISTRICT_ID_COLUMN);
Owner owner = null;
if (dr.Read())
{
owner = new Owner
{
Id = DaoUtil.ValueOrDefault<int>(ID_COLUMN_INDEX, dr),
Username = DaoUtil.ValueOrDefault<string>(USERNAME_COLUMN_INDEX, dr),
Password = DaoUtil.ValueOrDefault<string>(PASSWORD_COLUMN_INDEX, dr),
Name = DaoUtil.ValueOrDefault<string>(NAME_COLUMN_INDEX, dr),
LastName = DaoUtil.ValueOrDefault<string>(LAST_NAME_COLUMN_INDEX, dr),
BirthDate = DaoUtil.ValueOrDefault<DateTime>(BIRTHDATE_COLUMN_INDEX, dr),
DNI = DaoUtil.ValueOrDefault<string>(DNI_COLUMN_INDEX, dr),
EMail = DaoUtil.ValueOrDefault<string>(EMAIL_COLUMN_INDEX, dr),
Address = DaoUtil.ValueOrDefault<string>(ADDRESS_COLUMN_INDEX, dr),
PhoneNumber = DaoUtil.ValueOrDefault<string>(PHONE_COLUMN_INDEX, dr),
ProfilePicture = DaoUtil.ValueOrDefault<string>(PROFILE_PIC_COLUMN_INDEX, dr),
DistrictId = DaoUtil.ValueOrDefault<int>(DISTRICT_ID_COLUMN_INDEX, dr)
};
}
return owner;
}
}
}
public List<Owner> FindAll(IDbConnection conn)
{
using (cmd = db.GetStoredProcedureCommand(USP_OWNER_FINDALL, conn))
using (dr = cmd.ExecuteReader())
{
int ID_COLUMN_INDEX = dr.GetOrdinal(ID_COLUMN);
int USERNAME_COLUMN_INDEX = dr.GetOrdinal(USERNAME_COLUMN);
int PASSWORD_COLUMN_INDEX = dr.GetOrdinal(PASSWORD_COLUMN);
int NAME_COLUMN_INDEX = dr.GetOrdinal(NAME_COLUMN);
int LAST_NAME_COLUMN_INDEX = dr.GetOrdinal(LAST_NAME_COLUMN);
int BIRTHDATE_COLUMN_INDEX = dr.GetOrdinal(BIRTHDATE_COLUMN);
int DNI_COLUMN_INDEX = dr.GetOrdinal(DNI_COLUMN);
int EMAIL_COLUMN_INDEX = dr.GetOrdinal(EMAIL_COLUMN);
int ADDRESS_COLUMN_INDEX = dr.GetOrdinal(ADDRESS_COLUMN);
int PHONE_COLUMN_INDEX = dr.GetOrdinal(PHONE_COLUMN);
int PROFILE_PIC_COLUMN_INDEX = dr.GetOrdinal(PROFILE_PIC_COLUMN);
int DISTRICT_ID_COLUMN_INDEX = dr.GetOrdinal(DISTRICT_ID_COLUMN);
List<Owner> lOwner = new List<Owner>();
Owner owner = null;
while (dr.Read())
{
owner = new Owner
{
Id = DaoUtil.ValueOrDefault<int>(ID_COLUMN_INDEX, dr),
Username = DaoUtil.ValueOrDefault<string>(USERNAME_COLUMN_INDEX, dr),
Password = DaoUtil.ValueOrDefault<string>(PASSWORD_COLUMN_INDEX, dr),
Name = DaoUtil.ValueOrDefault<string>(NAME_COLUMN_INDEX, dr),
LastName = DaoUtil.ValueOrDefault<string>(LAST_NAME_COLUMN_INDEX, dr),
BirthDate = DaoUtil.ValueOrDefault<DateTime>(BIRTHDATE_COLUMN_INDEX, dr),
DNI = DaoUtil.ValueOrDefault<string>(DNI_COLUMN_INDEX, dr),
EMail = DaoUtil.ValueOrDefault<string>(EMAIL_COLUMN_INDEX, dr),
Address = DaoUtil.ValueOrDefault<string>(ADDRESS_COLUMN_INDEX, dr),
PhoneNumber = DaoUtil.ValueOrDefault<string>(PHONE_COLUMN_INDEX, dr),
ProfilePicture = DaoUtil.ValueOrDefault<string>(PROFILE_PIC_COLUMN_INDEX, dr),
DistrictId = DaoUtil.ValueOrDefault<int>(DISTRICT_ID_COLUMN_INDEX, dr)
};
lOwner.Add(owner);
}
return lOwner;
}
}
public Owner Login(Owner owner, IDbConnection conn)
{
using (cmd = db.GetCommand(USP_OWNER_LOGIN, conn))
{
cmd.Parameters.Add(db.GetParameter(USERNAME_PARAM, owner.Username));
cmd.Parameters.Add(db.GetParameter(PASSWORD_PARAM, owner.Password));
using (dr = cmd.ExecuteReader())
{
int ID_COLUMN_INDEX = dr.GetOrdinal(ID_COLUMN);
int USERNAME_COLUMN_INDEX = dr.GetOrdinal(USERNAME_COLUMN);
int PASSWORD_COLUMN_INDEX = dr.GetOrdinal(PASSWORD_COLUMN);
int NAME_COLUMN_INDEX = dr.GetOrdinal(NAME_COLUMN);
int LAST_NAME_COLUMN_INDEX = dr.GetOrdinal(LAST_NAME_COLUMN);
int BIRTHDATE_COLUMN_INDEX = dr.GetOrdinal(BIRTHDATE_COLUMN);
int DNI_COLUMN_INDEX = dr.GetOrdinal(DNI_COLUMN);
int EMAIL_COLUMN_INDEX = dr.GetOrdinal(EMAIL_COLUMN);
int ADDRESS_COLUMN_INDEX = dr.GetOrdinal(ADDRESS_COLUMN);
int PHONE_COLUMN_INDEX = dr.GetOrdinal(PHONE_COLUMN);
int PROFILE_PIC_COLUMN_INDEX = dr.GetOrdinal(PROFILE_PIC_COLUMN);
int DISTRICT_ID_COLUMN_INDEX = dr.GetOrdinal(DISTRICT_ID_COLUMN);
if (dr.Read())
{
owner = new Owner
{
Id = DaoUtil.ValueOrDefault<int>(ID_COLUMN_INDEX, dr),
Username = DaoUtil.ValueOrDefault<string>(USERNAME_COLUMN_INDEX, dr),
Password = DaoUtil.ValueOrDefault<string>(PASSWORD_COLUMN_INDEX, dr),
Name = DaoUtil.ValueOrDefault<string>(NAME_COLUMN_INDEX, dr),
LastName = DaoUtil.ValueOrDefault<string>(LAST_NAME_COLUMN_INDEX, dr),
BirthDate = DaoUtil.ValueOrDefault<DateTime>(BIRTHDATE_COLUMN_INDEX, dr),
DNI = DaoUtil.ValueOrDefault<string>(DNI_COLUMN_INDEX, dr),
EMail = DaoUtil.ValueOrDefault<string>(EMAIL_COLUMN_INDEX, dr),
Address = DaoUtil.ValueOrDefault<string>(ADDRESS_COLUMN_INDEX, dr),
PhoneNumber = DaoUtil.ValueOrDefault<string>(PHONE_COLUMN_INDEX, dr),
ProfilePicture = DaoUtil.ValueOrDefault<string>(PROFILE_PIC_COLUMN_INDEX, dr),
DistrictId = DaoUtil.ValueOrDefault<int>(DISTRICT_ID_COLUMN_INDEX, dr)
};
}
return owner;
}
}
}
}
类所有者daoimpl:IOwnerDao
{
private const string ID_COLUMN=“ID”;
私有常量字符串USERNAME\u COLUMN=“USERNAME”;
private const string PASSWORD_COLUMN=“PASSWORD”;
private const string NAME_COLUMN=“NAME”;
私有常量字符串LAST\u NAME\u COLUMN=“LastName”;
private const string BIRTHDATE_COLUMN=“BIRTHDATE”;
私有常量字符串DNI_COLUMN=“DNI”;
private const string EMAIL_COLUMN=“EMAIL”;
私有常量字符串地址\u COLUMN=“ADDRESS”;
private const string PHONE_COLUMN=“PhoneNumber”;
private const string PROFILE\u PIC\u COLUMN=“ProfilePicture”;
private const string DISTRICT\u ID\u COLUMN=“DistrictId”;
private const string ID_PARAM=“@ID”;
私有常量字符串USERNAME_PARAM=“@user”;
private const string PASSWORD_PARAM=“@pass”;
private const string NAME_PARAM=“@NAME”;
私有常量字符串LAST_NAME_PARAM=“@lastName”;
private const string BIRTHDATE_PARAM=“@BIRTHDATE”;
私有常量字符串DNI_PARAM=“@DNI”;
private const string EMAIL_PARAM=“@EMAIL”;
private const string ADDRESS_PARAM=“@ADDRESS”;
private const string PHONE_PARAM=“@phoneNum”;
private const string PROFILE_PIC_PARAM=“@profilePic”;
private const string DISTRICT_ID_PARAM=“@disId”;
private const string ROW_COUNT_PARAM=“@rowCount”;
伊达他酶db;
IDbCommand;
伊达瑞德博士;
公有人daoimpl()
{
db=DatabaseFactory.GetSqlDatabase();
}
公共整数插入(所有者到插入,IDB连接连接)
{
使用(cmd=db.GetStoredProcedureCommand(USP\u所有者\u插入,conn))
{
Add(db.GetParameter(USERNAME_PARAM,daouutil.ValueOrDbNull(toInsert.USERNAME));
Add(db.GetParameter(PASSWORD_PARAM,daouutil.ValueOrDbNull(toInsert.PASSWORD));
Add(db.GetParameter(NAME_PARAM,daouutil.ValueOrDbNull(toInsert.NAME));
Add(db.GetParameter(LAST_NAME_PARAM,daouutil.ValueOrDbNull(toInsert.LastName));
Add(db.GetParameter(BIRTHDATE_PARAM,daouutil.ValueOrDbNull(toInsert.BIRTHDATE));
Add(db.GetParameter(DNI_PARAM,daouutil.ValueOrDbNull(toInsert.DNI));
Add(db.GetParameter(EMAIL_PARAM,daouutil.ValueOrDbNull(toInsert.EMAIL));
Add(db.GetParameter(ADDRESS_PARAM,daouutil.ValueOrDbNull(toInsert.ADDRESS));
Add(db.GetParameter(PHONE_PARAM,daouutil.ValueOrDbNull(toInsert.PhoneNumber));
Add(db.GetParameter(PROFILE_PIC_PARAM,daouutil.ValueOrDbNull(toInsert.ProfilePicture));
Add(db.GetParameter(DISTRICT_ID_PARAM,daouutil.ValueOrDbNull(toInsert.DistrictId));
Add(db.GetOutputParameter(ID_PARAM,SqlDbType.Int));
cmd.ExecuteNonQuery();
返回(int)((IDataParameter)命令参数[ID_PARAM])值;
}
}
公共bool更新(所有者更新,IDB连接连接)
{
使用(cmd=db.GetStoredProcedureCommand(USP\u所有者\u更新,康涅狄格州))
{
Add(db.GetParameter(ID_PARAM,daouutil.ValueOrDbNull(toUpdate.ID));
Add(db.GetParameter(USERNAME_PARAM,daouutil.ValueOrDbNull(toUpdate.USERNAME));
Add(db.GetParameter(PASSWORD_PARAM,daouutil.ValueOrDbNull(toUpdate.PASSWORD));
Add(db.GetParameter(NAME_PARAM,daouutil.ValueOrDbNull(toUpdate.NAME));
Add(db.GetParameter(LAST_NAME_PARAM,daouutil.ValueOrDbNull(toUpdate.LastName));
Add(db.GetParameter(BIRTHDATE_PARAM,daouutil.ValueOrDbNull(toUpdate.BIRTHDATE));
Add(db.GetParameter(DNI_PARAM,daouutil.ValueOrDbNull(toUpdate.DNI));
cmd.Parameters.Add(db.GetParameter(EMAIL_PARAM,daouutil.ValueOrDbNull(toUpdate.EMAIL));
Add(db.GetParameter(ADDRESS_PARAM,daouutil.ValueOrDbNull(toUpdate.ADDRESS));
Add(db.GetParameter(PHONE_PARAM,daouutil.ValueOrDbNull(toUpdate.PhoneNumber));
Add(db.GetParameter(PROFILE_PIC_PARAM,daouutil.ValueOrDbNull(toUpdate.ProfilePicture));
Add(db.GetParameter(DISTRICT_ID_PARAM,daouutil.ValueOrDbNull(toUpdate.DistrictId));
Add(db.GetOutputParameter(ROW_COUNT_PARAM,SqlDbType.Int));
cmd.ExecuteNonQuery();
返回(int)((IDataParameter)命令参数[行计数参数])。值>0;
}
}
公共bool Delete(对象id,IDbConnection)
{
使用(cmd=db.GetStoredProcedureCommand(USP\u OWNER\u DELETE,conn))
{
Add(db.GetParameter(ID_PARAM,daouutil.ValueOrDbNull(ID));
Add(db.GetOutputParameter(ROW_COUNT_PARAM,SqlDbType.Int));
cmd.ExecuteNonQuery();
返回(int)((IDataParameter)命令参数[行计数参数])。值>0;
}
}
公共所有者查找(对象id,IDbConnection)
{
使用(cmd=db.GetStoredProcedureCommand(USP\u OWNER\u FIND,conn))
{
Add(db.GetParameter(ID_PARAM,daouutil.ValueOrDbNull(ID));
使用(dr=cmd.ExecuteReader())
{
int ID_COLUMN_INDEX=dr.GetOrdinal(ID_COLUMN);
int USERNAME_COLUMN_INDEX=dr.GetOrdinal(USERNAME_COLUMN);
int PASSWORD_COLUMN_INDEX=dr.GetOrdinal(PASSWORD_COLUMN);
int NAME_COLUMN_INDEX=dr.GetOrdinal(NAME_COLUMN);
int LAST_NAME_COLUMN_INDEX=dr.GetOrdinal(LAST_NAME_COLUMN);
int BIRTHDATE_COLUMN_INDEX=dr.GetOrdinal(BIRTHDATE_COLUMN);