Обновление базы данных с условиями с помощью C#

У меня есть проект ASP.NET.

В этом проекте у меня есть 2 расширений календаря (например, указатели даты и времени для выбора дат), 1 выпадающий список, 4 текстовых поля и 1 кнопка.

В моей базе данных у меня есть эти столбцы;

[ID] - [NAME] - [WORKTYPE] - [MON] - [TUE] - [WED] - [THU] - [FRI] - [SAT] - [SUN] - 
[TOTAL] - [DAYS] - [‌PENALTY1] - [PENALTY2] - [CORRECTION] - [DATE] - 
[RAWTIME] - [ACCUMULATIVE]

Все эти столбцы integer, просто имя и тип работы varchar,

Здесь вопрос. Мне нужно обновить значения, которые я собираюсь записать, они должны пойти и обновить строки между выбранными датами и выбранными сотрудниками. Я надеюсь, что я объяснил себе.

Я написал этот код C# на стороне.cs.

protected void Button1_Click(object sender, EventArgs e)
{
    string strSQL = "UPDATE informations SET DAYS= @DAYS, PENALTY1 = @PENALTY1, PENALTY2 = @PENALTY2, CORRECTION = @CORRECTION WHERE DATE BETWEEN @DATE1 AND @DATE2 AND ID = @ID ";
    string connStr = WebConfigurationManager.ConnectionStrings["asgdb01ConnectionString"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        using (SqlCommand comm = new SqlCommand())
        {
            comm.Connection = conn;
            comm.CommandText = strSQL;
            comm.CommandType = CommandType.Text;
            comm.Parameters.AddWithValue("@ID", Int32.Parse(DropDownList1.SelectedItem.Value));
            comm.Parameters.AddWithValue("@DATE1", CalendarExtender1.SelectedDate);
            comm.Parameters.AddWithValue("@DATE2", CalendarExtender2.SelectedDate);
            comm.Parameters.Add(new SqlParameter("@DAYS", Int32.Parse(TextBox3.Text)));
            comm.Parameters.Add(new SqlParameter("@PENALTY1", Int32.Parse(TextBox4.Text)));
            comm.Parameters.Add(new SqlParameter("@PENALTY2", Int32.Parse(TextBox5.Text)));
            comm.Parameters.Add(new SqlParameter("@CORRECTION", Int32.Parse(TextBox6.Text)));
            try
            {
                conn.Open();
                int i = comm.ExecuteNonQuery();
                conn.Close();
                if (i > 0)
                {
                    Response.Write("Success ! ");
                }
                else
                {
                    Response.Write("No record was updated ");
                }
            }
            catch (SqlException ex)
            {
                Response.Write(ex.ToString());
            }
        }
    }

Это дает эту огромную ошибку в верхней части моей страницы, когда я нажимаю кнопку рассчитать

System.Data.SqlClient.SqlException (0x80131904): параметризованный запрос '(@ID int,@DATE1 nvarchar(4000),@DATE2 nvarchar(4000),@DAYS int' 'ожидает параметр'@DATE1 ', который не был в комплект поставки.

Мне очень нужна твоя помощь, я жду твоих ответов, друзья.

Большое спасибо.

2 ответа

CalendarExtender1.SelectedDate имеет значение null - либо потому, что он должен быть нулевым, либо он еще не был обновлен из параметров веб-запроса

вызов Parameters.AddWithValue со вторым аргументом null (почти) аналогичен тому, что вообще не вызывал его, если вам нужно передать null в параметре SQL, используйте DbNull.Value

Я решил свою проблему.

Потому что я ожидаю от моего CalendarExtender для хранения значения. Но как это может быть..

Мои текстовые поля получают значения.. поэтому он должен измениться так;

comm.Parameters.AddWithValue("@DATE1", Convert.ToDateTime(TextBox1.Text));
comm.Parameters.AddWithValue("@DATE2", Convert.ToDateTime(TextBox2.Text));

спасибо, что предупредили меня о значениях NULL..

Другие вопросы по тегам