当我<asp:button>
在C#中按时,我试图创建一个条件事件。
我有一个GridView
与两个数据库表(在SQL Server中)相关的表。我应该每天在其中一个中插入不同的值。
里面GridView
:
BoundField
与ID
数据库表中的每个项目TemplateFields
带有文本框的框,分别为StartGV
和EndGV
外GridView
:
<asp:TextBox>
一个AjaxCalendarExtender
。我应该在那里选择日期。文本框是TextDate
因此,当我按时<asp:button>
,该事件应为:
检查数据库中是否已存在该记录中的每一行Gridview
(ID
从中GridView
的第一列开始,在文本框外的日期中选择日期GridView
)。
我正在使用存储过程进行更新和插入。
这是C#中的代码:
protected void BotonSubmit_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
//HERE I SAVE THE TEXTBOXS FROM GRIDVIEW INSIDE A VARIABLE
TextBox StartGV = row.FindControl("StartGV") as TextBox;
TextBox EndGV = row.FindControl("EndGV") as TextBox;
DateTime Date = DateTime.ParseExact(TextDate.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture);
//HERE I EXTRACT THE VALUE FROM THE FIRST COLUMN (THE ID)
if (row.RowType == DataControlRowType.DataRow)
{
string ID = row.Cells[0].Text;
//HERE I CHECK IF THE ROW ALREADY EXISTS IN DATABASE TABLE:
//IF YES, UPDATE:
if (CADCATOPS.CADBatchHandoff.CheckTableDB(Convert.ToInt32(ID), Convert.ToString(Date)))
{
string connectionString = @"MY CONNECTION STRING";
SqlConnection Connection1 = null;
SqlTransaction Transaction1 = null;
{
Connection1 = new SqlConnection();
Connection1.ConnectionString = connectionString;
Connection1.Open();
Transaction1 = Connection1.BeginTransaction(System.Data.IsolationLevel.Serializable);
SqlCommand command1 = new SqlCommand("UPDATE", Connection1, Transaction1);
command1.CommandType = CommandType.StoredProcedure;
command1.Parameters.Clear();
command1.Parameters.AddWithValue("@Start", Convert.ToDateTime(StartGV.Text));
if (EndGV.Text != "")
{
command1.Parameters.AddWithValue("@End", Convert.ToDateTime(EndGV.Text));
}
command1.ExecuteNonQuery();
Transaction1.Commit();
Connection1.Close();
}
}
//IF NO, INSERT:
if (!CADCATOPS.CADBatchHandoff.CheckTableDB(Convert.ToInt32(IDBatch), Convert.ToString(FechaCT1)))
{
//FIRST OF ALL, CHECK IF THE "STARTGV" TEXTBOX IS NOT EMPTY. IF IT'S EMPTY, THE PROCESS WILL NOT START FOR THIS ROW.
if (StartGV.Text != "")
{
string connectionString = @"MY CONNECTION STRING";
SqlConnection Connection1 = null;
SqlTransaction Transaction1 = null;
{
Connection1 = new SqlConnection();
Connection1.ConnectionString = connectionString;
Connection1.Open();
Transaction1 = Connection1.BeginTransaction(System.Data.IsolationLevel.Serializable);
SqlCommand command1 = new SqlCommand("INSERT", Connection1, Transaction1);
command1.CommandType = CommandType.StoredProcedure;
command1.Parameters.Clear();
command1.Parameters.AddWithValue("@Start", Convert.ToDateTime(StartGV.Text));
if (EndGV.Text != "")
{
command1.Parameters.AddWithValue("@End", Convert.ToDateTime(EndGV.Text));
}
comando.Parameters.AddWithValue("@ID", Convert.ToInt32(ID));
comando.Parameters.AddWithValue("@DATE", Convert.ToDateTime(DATE.Text));
command1.ExecuteNonQuery();
Transaction1.Commit();
Connection1.Close();
}
}
}
}
}
}
因此,这是可行的,但是出了点问题:
该INSERT
条件正常工作。
该UPDATE
工作不正常:选择过程中的“StartGV”和EndGV”的价值观始终是一样的最后一行此不与INSERT过程中发生。
为什么会这样呢?
编辑
我忘了SELECT
在我的项目中显示语句:
在表适配器内部,我创建了以下查询CheckTableDB
:
SELECT COUNT(*)
FROM BatchDatos
WHERE (ID = @ID) and (DATE=@DATE)
然后,在C#中:
public static bool CheckTableDB(int ID, string DATE)
{
return adapter.CheckTableDB(ID, DATE) != 0;
}
我将此用于UPDATE
和INSERT
。对于来说INSERT
,一切正常,这意味着问题不在这里。
无条件更新表中的所有行。您需要使用GV中的ID来更新数据库中的确切行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句