这是我的c#代码。
protected void btnSkipSubmit_Click(object sender, EventArgs e)
{
myConnection newobj = new myConnection();
IdGen newid = new IdGen();
Patient p = new Patient();
p.PatientName = "D"; //assigning values of the controls to object data members
p.F_H_GName = "D";
p.F_H_G = "D";
p.AgeOnRegn = 1;
p.Email = "D";
p.ContactNo = "D";
p.Gender = "D";
p.Married = "D";
p.AddrLine1 = "D";
p.AddrLine2 = "D";
p.AddrLine3 = "D";
p.City = "D";
p.PinCode = 1;
p.Religion = "D";
p.Occupation = "D";
p.RegTime = DateTime.Now;
p.VisitDate = DateTime.Now;
p.CurrDept = 14;
p.NextDept = 14; //if next dept is selected as MRD then save it as Dummy dept
p.PayId = "FR";
p.Archived = "n"; //need to be corrected at later stage
p.UpdateUser = Session["User"].ToString();
p.UpdateShift = 1;
p.UpdateDate = DateTime.Parse(DateTime.Now.ToString());
p.LocId = Session["Location"].ToString();
p.Remark = "D";
p.Religion = "D";
p.PayDet1 = "D";
p.PayDet2 = "D";
p.PayDet3 = "D";
p.PayValidity = DateTime.Now;
int random = 0;
bool isValidInt = int.TryParse(txtrandom.Text, out random);
for (int i = 0; i < random; i++)
{
DateTime date = DateTime.Parse(DateTime.Now.ToShortDateString());
string locn = Session["Location"].ToString();
string month = date.Month.ToString();
string paddedmonth = month.ToString();
if (month.Length == 1)
{
paddedmonth = 0 + month;
}
string year = date.Year.ToString();
newid = newobj.fnPatientIdPicker("PatientID", locn);
int seed1 = newid.Seed;
int mon1 = newid.Month;
if (!(mon1.ToString().Equals(month)))
{
seed1 = 1;
mon1 = Convert.ToInt32(month);
}
string paddedId = seed1.ToString();
if (seed1 < 10)
paddedId = "000" + seed1;
else if (seed1 < 100)
paddedId = "00" + seed1;
else if (seed1 < 1000)
paddedId = "0" + seed1;
else
paddedId = seed1.ToString();
string patientid = locn + paddedmonth + year + paddedId;
int retvalue = newobj.fnPatientIdIncrementer(seed1 + 1, mon1, "PatientID", locn);
p.HospitalNo = patientid;
string str;
string cmdString;
SqlConnection con;
SqlCommand cmd;
SqlTransaction transaction;
str = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
con = new SqlConnection(str);
cmdString = "INSERT INTO Patient_Data(PatientID,PatientName,F_H_GName,AgeOnRegn,Gender,Married,AddressLine1,City,RegTime,VisitDate,CurrDept,NextDept,PayID,Archived,UpdateUser,UpdateDate,LocID,F_H_G) VALUES (@PatientID,@PatientName,@F_H_GName,@AgeOnRegn,@Gender,@Married,@AddrLine1,@City,@RegTime,@VisitDate,@CurrDept,@NextDept,@PayID,@Archived,@UpdateUser,@UpdateDate,@LocId,@F_H_G)";
con = new SqlConnection(str);
try
{
con.Open();
transaction = con.BeginTransaction();
cmd = new SqlCommand(cmdString, con, transaction);
cmd.Parameters.Clear();
cmd.Parameters.Add("@PatientID", SqlDbType.VarChar, 12);
cmd.Parameters["@PatientID"].Value = p.HospitalNo;
cmd.Parameters.Add("@PatientName", SqlDbType.VarChar, 30);
cmd.Parameters["@PatientName"].Value = p.PatientName;
cmd.Parameters.Add("@F_H_G", SqlDbType.VarChar, 1);
cmd.Parameters["@F_H_G"].Value = p.F_H_G;
cmd.Parameters.Add("@F_H_GName", SqlDbType.VarChar, 30);
cmd.Parameters["@F_H_GName"].Value = p.F_H_GName;
cmd.Parameters.Add("@AgeOnRegn", SqlDbType.Int);
cmd.Parameters["@AgeOnRegn"].Value = p.AgeOnRegn;
cmd.Parameters.Add("@Email", SqlDbType.VarChar, 40);
cmd.Parameters["@Email"].Value = p.Email;
cmd.Parameters.Add("@ContactNo", SqlDbType.VarChar, 12);
cmd.Parameters["@ContactNo"].Value = p.ContactNo;
cmd.Parameters.Add("@Gender", SqlDbType.VarChar, 1);
cmd.Parameters["@Gender"].Value = p.Gender;
cmd.Parameters.Add("@Married", SqlDbType.VarChar, 1);
cmd.Parameters["@Married"].Value = p.Married;
cmd.Parameters.Add("@AddrLine1", SqlDbType.VarChar, 100);
cmd.Parameters["@AddrLine1"].Value = p.AddrLine1;
cmd.Parameters.Add("@AddrLine2", SqlDbType.VarChar, 100);
cmd.Parameters["@AddrLine2"].Value = p.AddrLine2;
cmd.Parameters.Add("@AddrLine3", SqlDbType.VarChar, 100);
cmd.Parameters["@AddrLine3"].Value = p.AddrLine3;
cmd.Parameters.Add("@City", SqlDbType.VarChar, 20);
cmd.Parameters["@City"].Value = p.City;
cmd.Parameters.Add("@PinCode", SqlDbType.Int);
cmd.Parameters["@PinCode"].Value = p.PinCode;
cmd.Parameters.Add("@Religion", SqlDbType.VarChar, 20);
cmd.Parameters["@Religion"].Value = p.Religion;
cmd.Parameters.Add("@Occupation", SqlDbType.VarChar, 20);
cmd.Parameters["@Occupation"].Value = p.Occupation;
cmd.Parameters.Add("@RegTime", SqlDbType.DateTime);
cmd.Parameters["@RegTime"].Value = p.RegTime;
cmd.Parameters.Add("@VisitDate", SqlDbType.DateTime);
cmd.Parameters["@VisitDate"].Value = p.VisitDate;
cmd.Parameters.Add("@CurrDept", SqlDbType.Int);
cmd.Parameters["@CurrDept"].Value = p.CurrDept;
cmd.Parameters.Add("@NextDept", SqlDbType.Int);
cmd.Parameters["@NextDept"].Value = p.NextDept;
cmd.Parameters.Add("@PayId", SqlDbType.VarChar, 2);
cmd.Parameters["@PayId"].Value = p.PayId;
cmd.Parameters.Add("@PayDet1", SqlDbType.VarChar, 15);
cmd.Parameters["@PayDet1"].Value = p.PayDet1;
cmd.Parameters.Add("@PayDet2", SqlDbType.VarChar, 50);
cmd.Parameters["@PayDet2"].Value = p.PayDet2;
cmd.Parameters.Add("@PayDet3", SqlDbType.VarChar, 15);
cmd.Parameters["@PayDet3"].Value = p.PayDet3;
cmd.Parameters.Add("@PayValidity", SqlDbType.DateTime);
cmd.Parameters["@PayValidity"].Value = p.PayValidity;
cmd.Parameters.Add("@Archived", SqlDbType.VarChar, 1);
cmd.Parameters["@Archived"].Value = p.Archived;
cmd.Parameters.Add("@UpdateUser", SqlDbType.VarChar, 20);
cmd.Parameters["@UpdateUser"].Value = p.UpdateUser;
cmd.Parameters.Add("@UpdateShift", SqlDbType.Int);
cmd.Parameters["@UpdateShift"].Value = p.UpdateShift;
cmd.Parameters.Add("@UpdateDate", SqlDbType.DateTime);
cmd.Parameters["@UpdateDate"].Value = p.UpdateDate;
cmd.Parameters.Add("@PatientCount", SqlDbType.Int);
cmd.Parameters["@PatientCount"].Value = p.PatientCount;
cmd.Parameters.Add("@LocId", SqlDbType.VarChar, 2);
cmd.Parameters["@LocId"].Value = p.LocId;
cmd.Parameters.Add("@Remark", SqlDbType.VarChar, 100);
cmd.Parameters["@Remark"].Value = p.Remark;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
log.Info("Patient added " + p.HospitalNo);
}
catch (Exception ex)
{
log.Debug("Error: Inside catch block of fnskippatient");
log.Error("Error msg:" + ex);
log.Error("Stack trace:" + ex.StackTrace);
}
finally
{
con.Close();
}
}
}
代码中涉及的功能如下所示
public IdGen fnPatientIdPicker(string item, string location)
{
cmdString = "SELECT [Seed],[Month] FROM [IdGenerator] WHERE (([Item] = @Item) AND ([Location] = @Location))";
con = new SqlConnection(str);
con.Open();
cmd = new SqlCommand(cmdString, con);
cmd.Parameters.Add("@Item", SqlDbType.VarChar, 30);
cmd.Parameters["@Item"].Value = item;
cmd.Parameters.Add("@Location", SqlDbType.VarChar, 30);
cmd.Parameters["@Location"].Value = location;
SqlDataReader reader = cmd.ExecuteReader();
IdGen pid = new IdGen();
while (reader.Read())
{
pid.Seed = (int)reader["Seed"];
pid.Month = (int)reader["Month"];
}
log.Debug("gets the max seed value,month value from IdGenerator table for a particular location, used for Hospital number generation" + pid);
con.Close();
return pid;//returns seed, month value as IdGen object
}
/*Increments the Patient ID seed value for a particular location by 1*/
public int fnPatientIdIncrementer(int NextSeed, int Month, string item, string location)
{
cmdString = "Update IdGenerator set Seed=@Seed,Month=@Month WHERE (([Item] = @Item) AND ([Location] = @Location))";
con = new SqlConnection(str);
try
{
con.Open();
cmd = new SqlCommand(cmdString, con);
cmd.Parameters.Add("@Seed", SqlDbType.Int);
cmd.Parameters["@Seed"].Value = NextSeed;
cmd.Parameters.Add("@Month", SqlDbType.Int);
cmd.Parameters["@Month"].Value = Month;
cmd.Parameters.Add("@Item", SqlDbType.VarChar, 30);
cmd.Parameters["@Item"].Value = item;
cmd.Parameters.Add("@Location", SqlDbType.VarChar, 30);
cmd.Parameters["@Location"].Value = location;
int result = Convert.ToInt32(cmd.ExecuteScalar());
log.Debug("Inside 'fnPatientIdIncrementer' -Increments the Patient ID seed value for a particular location by 1" + location);
log.Info("Info: patient id incremented successfully" + result);
return result;
}
catch (Exception e)
{
log.Debug("Error: Inside catch block of fnPatientIdIncrementer");
log.Error("Error msg:" + e);
log.Error("Stack trace:" + e.StackTrace);
return 0;
}
finally
{
con.Close();
}
}
日志文件消息如下所示
2013-11-07 10:47:17,734 [16] DEBUG myConnection [(null)] - Inside 'fnLogin' -function to log into the system, returns role if user exists
2013-11-07 10:47:17,750 [16] DEBUG myConnection [(null)] - Inside 'fnGetDepartment' -function to getting department 1
2013-11-07 10:47:17,750 [16] DEBUG myConnection [(null)] - inside 'getdeptcode' method -to get deptcode from deptid= MRD
2013-11-07 10:47:24,281 [12] DEBUG myConnection [(null)] - gets the max seed value,month value from IdGenerator table for a particular location, used for Hospital number generationIdGen
2013-11-07 10:47:26,734 [15] DEBUG myConnection [(null)] - gets the max seed value,month value from IdGenerator table for a particular location, used for Hospital number generationIdGen
2013-11-07 10:47:26,734 [15] DEBUG myConnection [(null)] - gets the max seed value,month value from IdGenerator table for a particular location, used for Hospital number generationIdGen
2013-11-07 10:47:26,734 [15] DEBUG myConnection [(null)] - Inside 'fnPatientIdIncrementer' -Increments the Patient ID seed value for a particular location by 1AT
2013-11-07 10:47:26,734 [15] INFO myConnection [(null)] - Info: patient id incremented successfully0
2013-11-07 10:47:26,734 [15] INFO ClerkReception_SkipRegaspx [(null)] - Patient added AT1120130046
2013-11-07 10:47:26,734 [15] DEBUG myConnection [(null)] - gets the max seed value,month value from IdGenerator table for a particular location, used for Hospital number generationIdGen
2013-11-07 10:47:26,734 [15] DEBUG myConnection [(null)] - Inside 'fnPatientIdIncrementer' -Increments the Patient ID seed value for a particular location by 1AT
2013-11-07 10:47:26,734 [15] INFO myConnection [(null)] - Info: patient id incremented successfully0
2013-11-07 10:47:26,734 [15] INFO ClerkReception_SkipRegaspx [(null)] - Patient added AT1120130047
我尝试过的代码显示no error
no exception
但仍然没有数据插入数据库,任何建议都值得赞赏。
答案 0 :(得分:0)
看起来您正在为插入使用事务但从不提交它。
文档说明:
您必须使用以下方式显式提交或回滚事务 提交或回滚方法。
在transaction.Commit();
cmd.ExecuteNonQuery();
如果异常也可能要添加回滚。
这个documentation就是一个很好的例子。