Error แบบนี้ค่ะ มีใครรู้บ้างค่ะควรแก้ยังไง The variable name '@Ts' has already been declared. Variable names must be unique within a query batch or stored procedure.
จะinsert ข้อมูลจากGridviewลงฐานข้อมูลค่ะ แต่เก็บข้อมูลแบบวนลูปตามจำนวนแถวที่เลือกค่ะ
แล้วเจอErrorแบบนี้ The variable name '@Ts' has already been declared. Variable names must be unique within a query batch or stored procedure. พอจะเดาได้ว่าไม่insertไม่ได้เพราะค่าในตัวTs ใช่ไหมค่ะ
ถ้า insertแค่ค่าเดียวจะสามารถเก็บได้ตามปกติค่ะ แต่ถ้าเลือกมากกว่า 1 ค่าก็จะErrorแบบนี้ค่ะ
นี้คือโค้ดที่้ขียนค่ะ
protected void btnAssignsubmit_Click(object sender, EventArgs e)
{
DateTime Ts = Convert.ToDateTime(txtAssignDate.Text + " " + txtAssignTime.Text);
txt4.Text = txtAssignDate.Text + " " + txtAssignTime.Text;
int i;
for (i = 0; i <= grdAssignList.Rows.Count - 1; i++)
{
CheckBox chkDel = (CheckBox)grdAssignList.Rows[i].FindControl("chkAssignList");
Label lblID = (Label)grdAssignList.Rows[i].FindControl("lblALisid");
if (chkDel.Checked)
{
con.Open();
String sqlSelect8 = "select Listtime3 from Listhealty where ListId = '" + lblID.Text + "'";
com.CommandText = sqlSelect8;
com.Connection = con;
SqlDataReader dr;
dr = com.ExecuteReader();
dr.Read();
txt3.Text = dr["Listtime3"].ToString();
int Time = Convert.ToInt32(txt3.Text);
DateTime TimeS = Convert.ToDateTime(txt4.Text);
DateTime Result = TimeS.AddMinutes(Time);
con.Close();
String sqlInsert = "insert into Assign(ClinicId, StaffId, ListId, PatientId, AssignDate, AssignTimestart, Timestart, Timefinish, Assigndetail) " + "values('" + Session["sessionAssCli"] + "', '" + Session["sessionAssSta"] + "', '" + lblID.Text + "','"
+ Session["sessionPatientId"] + "', '" + txtAssignDate.Text + "','" + txtAssignTime.Text + "', @Ts, @re, '" + txtAssigndetail.Text + "')";
com.CommandText = sqlInsert;
com.Connection = con;
com.Parameters.Add("@Ts", SqlDbType.DateTime).Value = Ts;
com.Parameters.Add("@re", SqlDbType.DateTime).Value = Result;
con.Open();
com.ExecuteNonQuery();
con.Close();
}
}
ทำยังไงถึงจะให้ข้อมูลที่อยู่ในตัวแปรที่error สามารถบันทึกข้อมูลรอบที่2ได้ค่ะ
รบกวนท่านผู้รู้ช่วยหน่อยนะค่ะ รีบมากกกเลยค่ะTag : .NET, Ms SQL Server 2008, Web (ASP.NET), C#, VS 2008 (.NET 3.x)
Date :
2011-02-12 15:32:24
By :
eieio
View :
1998
Reply :
8
om.CommandText = sqlInsert;
com.Connection = con;
if ( com.Parameters.Count > 0 ) com.Parameters.Clear() ;
com.Parameters.Add("@Ts", SqlDbType.DateTime).Value = Ts;
com.Parameters.Add("@re", SqlDbType.DateTime).Value = Result;
Date :
2011-02-12 18:31:17
By :
สาวเอ๋อ (ก้อคนมานเอ๋อ)
ทำได้แล้วค่ะ
ขอบคุณ สาวเอ๋อ (ก้อคนมานเอ๋อ) มากๆๆค่ะ
Date :
2011-02-12 19:53:40
By :
eieio
ขอถามต่อได้ไหมค่ะ
ถ้าเกิดว่าตอนเก็บข้อมูลรอบที่2 ต้องการเอาค่าของResultเก็บค่าแทนตัวแปรTS
ต้องทำยังไงค่ะ
Date :
2011-02-12 20:09:35
By :
eieio
Code (C#)
protected void btnAssignsubmit_Click(object sender, EventArgs e)
{
DateTime Ts = Convert.ToDateTime(txtAssignDate.Text + " " + txtAssignTime.Text);
txt4.Text = txtAssignDate.Text + " " + txtAssignTime.Text;
for (int i = 0; i <= grdAssignList.Rows.Count - 1; i++)
{
CheckBox chkDel = (CheckBox)grdAssignList.Rows[i].FindControl("chkAssignList");
Label lblID = (Label)grdAssignList.Rows[i].FindControl("lblALisid");
if (chkDel.Checked)
{
con.Open();
String sqlSelect8 = "select Listtime3 from Listhealty where ListId = '" + lblID.Text + "'";
com.CommandText = sqlSelect8;
com.Connection = con;
SqlDataReader dr;
dr = com.ExecuteReader();
dr.Read();
txt3.Text = dr["Listtime3"].ToString();
int Time = Convert.ToInt32(txt3.Text);
DateTime TimeS = Convert.ToDateTime(txt4.Text);
DateTime Result = TimeS.AddMinutes(Time);
switch (i)
{
case 1:
// จะทำอะไร ก้อใส่สะตรงนี้ค่ะ
break;
}
con.Close();
String sqlInsert = "insert into Assign(ClinicId, StaffId, ListId, PatientId, AssignDate, AssignTimestart, Timestart, Timefinish, Assigndetail) " + "values('" + Session["sessionAssCli"] + "', '" + Session["sessionAssSta"] + "', '" + lblID.Text + "','"
+ Session["sessionPatientId"] + "', '" + txtAssignDate.Text + "','" + txtAssignTime.Text + "', @Ts, @re, '" + txtAssigndetail.Text + "')";
com.CommandText = sqlInsert;
com.Connection = con;
com.Parameters.Add("@Ts", SqlDbType.DateTime).Value = Ts;
com.Parameters.Add("@re", SqlDbType.DateTime).Value = Result;
con.Open();
com.ExecuteNonQuery();
com.Parameters.Clear();
con.Close();
}
}
}
}
กรุณาใส่ tag ภาษา C# ด้วยนะคะจะได้อ่านง่าย
ครั้งนี้ครั้งแรกไม่ว่ากัน เที่ยวหน้าถ้าไม่ใส่มา ก็รอพี่ๆเพื่อนๆคนอื่นมาตอบให้ละกันค่ะ
ประวัติการแก้ไข 2011-02-12 23:32:45
Date :
2011-02-12 21:05:25
By :
blurEyes
ขอโทษค่ะ คราวหลังจะใส่ทุกอันเลยค่ะ
ลองทำตามโค้ดที่ให้มาแล้วค่ะ
แต่ว่าทำไม่ได้ค่ะ ค่ามันไม่ยอมเปลี่ยนค่ะ
พอจะมีวิธีอื่นอีกบ้างไหมค่ะ
ขอบคุณค่ะ
Date :
2011-02-12 21:19:11
By :
eieio
ขออธิบายเพิ่มเติมค่ะ คือว่าเก็บข้อมูลการรักษาของคนไข้ค่ะ
โดยที่คนไข้สามารถเลือกได้ว่าจะรักษากี่รายการใน 1 ครั้ง(ของการนัด)
และแต่ละรายการจะมีเวลาที่ใช้ในการรักษาอยู่ด้วยค่ะ ซึ่งการนัดแต่ละรายการจะเก็บเวลาเริ่มต้น คือเวลาที่คนไข้เลือกค่ะ
จากนั้นก็เอา เวลาเริ่มต้น+เวลาที่ใช้ในการรักษา= เวลาเสร็จสิ้น
ถ้าคนไข้ทำการเลือก 2 รายการ ข้อมูลอื่นๆจะเก็บเหมือนเดิมค่ะ ยกเว้น รายการรักษา
เวลาเริ่มต้นซึ่งต้องเอาเวลาเสร็จสิ้นจากรายการที่แล้วมาเป็นเวลาเริ่มต้นของรายการที่2นี้ค่ะ
ส่วนที่เหลือก็คำนวณเหมือนเดิม ก็จะได้ข้อมูลออกใา2ชุด แต่เป็นการนัดภายในครั้งเดียวค่ะ
ประมาณนี้ค่ะ
ขอบคุณมากค่ะ
Date :
2011-02-13 12:46:24
By :
eieio
ลองเขียนโค้ดตามที่ให้มาแล้วค่ะ
แต่ไม่ได้ผลอย่างที่ต้องการค่ะ
คือพอเลือกรายการแล้วมันจะไปทำใน caseที่กำหนดไว้ใช่ไหมค่ะ
แต่ที่ต้องการมันไม่ใช่แบบนี้อะค่ะ
จะเป็นตามที่อธิบายไว้ข้างบนค่ะ
รบกวนท่านผู้รู้ทุกท่านช่วยหน่อยนะค่ะ
ยังไม่ถึงไหนเลย
ขอบคุณค่ะ
Date :
2011-02-13 16:20:41
By :
eieio
Load balance : Server 04