主要是通过递归的方法
public class UBISerials
{
public static void MakeSerials(int num,MyRandom rnd,string batchid)
{
//递归调用
int ierr=InsertSerials(num,rnd,batchid);
if(ierr>0)
MakeSerials(ierr,rnd,batchid);
else
{
SqlConnection conn=new SqlConnection(Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["conn"]));
SqlCommand cmd=new SqlCommand("sp_batchstate",conn);
//Create PROCEDURE sp_batchstate
//@batchid nvarchar(50)
//as
//update batch set batch_state=0 where batch_id=@batchid
//GO
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter parm1=new SqlParameter("@batchid",SqlDbType.VarChar,50);
parm1.Value=batchid;
cmd.Parameters.Add(parm1);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
public static int InsertSerials(int num,MyRandom rnd,string batchid)
{
int ierr=0;
SqlConnection conn=new SqlConnection(Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["conn"]));
SqlCommand cmd=new SqlCommand("sp_addkey",conn);
//Create PROCEDURE sp_addkey
//@key nvarchar(50),@batchid nvarchar(50)
//as
//insert into keys (keys_key,keys_batch_id)values(@key,@batchid)
//GO
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter parm1=new SqlParameter("@key",SqlDbType.VarChar,50);
SqlParameter parm2=new SqlParameter("@batchid",SqlDbType.VarChar,50);
parm2.Value=batchid;
cmd.Parameters.Add(parm1);
cmd.Parameters.Add(parm2);
conn.Open();
for(int i=0;i<num;i++)
{
try
{
parm1.Value=rnd.GetRandomNum();
cmd.ExecuteNonQuery();
}
catch
{
ierr++;
}
}
conn.Close();
return ierr;
}
}
public class MyRandom
{
private string _strin;
private string _strout;
private Random _rnd;
public MyRandom(string strin)
{
_rnd=new Random(System.Environment.TickCount);
_strin=strin;
}
private string GetOneRandomNum(string strformat)
{
string strtemp;
switch(strformat)
{
case "*":
{
int itmp=_rnd.Next(36);
if(itmp<10)
strtemp=_rnd.Next(10).ToString();
else
strtemp=Convert.ToChar(_rnd.Next(26)+'A').ToString();
break;
}
case "#":
{
strtemp=_rnd.Next(10).ToString();
break;
}
case "$":
{
strtemp=Convert.ToChar(_rnd.Next(26)+'A').ToString();
break;
}
default:
{
strtemp=strformat;
break;
}
}
return strtemp;
}
public string GetRandomNum()
{
_strout=String.Empty;
for(int i=0;i<_strin.Length;i++)
{
_strout+=this.GetOneRandomNum(_strin[i].ToString());
}
return _strout;
}
}
调用方法:
string batchid;
DataSet ds=new DataSet();
SqlConnection conn=new SqlConnection(strconn);
SqlDataAdapter da=new SqlDataAdapter("sp_selectbatch",conn);
//Create PROCEDURE sp_selectbatch
//as
//select top 1 * from batch where batch_state=1
//GO
da.Fill(ds,"batch");
if(ds.Tables["batch"].Rows.Count==1)
{
batchid=Convert.ToString(ds.Tables["batch"].Rows[0]["batch_id"]);
UBISerials.MakeSerials(Convert.ToInt32(ds.Tables["batch"].Rows[0]["batch_totalnum"]),new MyRandom(Convert.ToString(ds.Tables["batch"].Rows[0]["batch_format"])),Convert.ToString(ds.Tables["batch"].Rows[0]["batch_id"]));
}
}