SQL Server有条件的存储过程

丹尼斯·索托(Denis Soto)

当我<asp:button>在C#中按时,我试图创建一个条件事件

我有一个GridView与两个数据库表(在SQL Server中)相关的表。我应该每天在其中一个中插入不同的值。

里面GridView

  • 我有一个BoundFieldID数据库表中的每个项目
  • 我有两个TemplateFields带有文本框的框,分别为StartGVEndGV

GridView

  • 我有<asp:TextBox>一个AjaxCalendarExtender我应该在那里选择日期。文本框是TextDate

因此,当我按时<asp:button>,该事件应为:

  • 检查数据库中是否已存在该记录中的每一行GridviewID从中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;
}

我将此用于UPDATEINSERT对于来说INSERT,一切正常,这意味着问题不在这里。

亚历克斯·库德里亚舍夫(Alex Kudryashev)

无条件更新表中的所有行。您需要使用GV中的ID来更新数据库中的确切行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章