代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题
时间:2011-05-19 来源:LORI.zhang
namespace Entity
{
/// <summary>
/// 自定义主键编码
/// </summary>
public enum PkIdRecordCode
{
/// <summary>
/// OrderID
/// </summary>
OR = 10,
/// <summary>
/// ProductID
/// </summary>
PR = 30,
/// <summary>
/// StoreID
/// </summary>
ST = 40,
/// <summary>
/// UserID
/// </summary>
US = 20,
}
/// <summary>
/// 含有自增主键性质的表枚举
/// </summary>
public enum PKIDTable
{
/// <summary>
/// 地区信息
/// </summary>
Areas = 1,
/// <summary>
/// 银行信息
/// </summary>
BankInfos = 2,
/// <summary>
/// 商品虚拟分类属性
/// </summary>
CategoryPropertys = 3,
}
}
/// <summary>
/// 代替数据库的自增主键的解决方案,解决了批量导数据ID出错的问题
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public int GetNewPKID(Entity.PKIDTable code) //由后后台也要建立用户,所以把它改为public -zhangzhanling
{
string _code = null;
int idNum = 0;
using (TransactionScope transactionScope = new TransactionScope())
{
try
{
_code = Enum.GetName(typeof(Entity.PKIDTable), code);
idNum = base._db.ExecuteQuery<int>("UPDATE PkIdTable SET IDNum= IDNum+1 WHERE Code={0};select IDNum from PkIdTable WHERE Code = {0}", _code).Single();
transactionScope.Complete();
transactionScope.Dispose();
return idNum;
}
catch (Exception ex)
{
throw ex;
}
finally
{
transactionScope.Dispose();
}
}
}
/// <summary>
/// 一些特殊的主键,需要有固定的位数,当位数的数字不够时,在前面补0
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public string GetNewID(Entity.PkIdRecordCode code) //由后后台也要建立用户,所以把它改为public -zhangzhanling
{
string _code = null;
int idNum = 0;
using (TransactionScope transactionScope = new TransactionScope())
{
try
{
_code = Enum.GetName(typeof(Entity.PkIdRecordCode), code);
idNum = base._db.ExecuteQuery<int>("UPDATE PkIdRecords SET IDNum= IDNum+1 WHERE Code={0};select IDNum from PkIdRecords WHERE Code = {0}", _code).Single();
transactionScope.Complete();
transactionScope.Dispose();
return string.Format("{0}{1}", (int)code, idNum.ToString().PadLeft(6, '0'));
}
catch (Exception ex)
{
throw ex;
}
finally
{
transactionScope.Dispose();
}
}
}
数据库结构