candijen Ответов: 3

Почему мой код datetime не работает?


Я пытаюсь сохранить текущую дату в базе данных под названием Deadline, но она не сохраняется, в базе данных также есть столбец Id, но я установил для него identity(1,1). Все еще не вставляя также, пожалуйста, дайте мне знать код, чтобы сравнить сохраненное время с текущим временем спасибо.

Тип данных, который я использовал для столбца date, - DateTime.
Вот код, который я использовал.

protected void Button1_Click(object sender, EventArgs e)
    {

        string constr = ConfigurationManager.ConnectionStrings["facultylogConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "Insert into Deadline (Date) values (@Date)";
                {
                    cmd.Parameters.AddWithValue("@Date", DateTime.Now);
                    cmd.Connection = con;
                    con.Open();
                    cmd.ExecuteReader();
                    con.Close();
                }
            }
        }


    }


Что я уже пробовал:

Попробовал и это тоже

String strConnString = ConfigurationManager.ConnectionStrings["facultylogConnectionString"].ConnectionString;
       String strQuery = "Insert into Deadline (Date) values (GetDate())";
       SqlConnection con = new SqlConnection(strConnString);
       SqlCommand cmd = new SqlCommand();
       cmd.CommandType = CommandType.Text;
       cmd.CommandText = strQuery;
       cmd.Connection = con;
       con.Open();
       cmd.ExecuteNonQuery();
       con.Close();

3 Ответов

Рейтинг:
2

Luc Pattyn

Я вижу две проблемы:

1.
Вы не можете изменить свою базу данных с помощью ExecuteReader; этот метод только считывает что-то из базы данных, он никогда ничего не записывает в нее. Используйте ExecuteNonQuery для вставок, обновлений, удалений...

2.
Очень много слов (список) зарезервированы в SQL, и "дата" является одним из них. Два решения: (а) избегайте использования их в качестве имен полей, это самый простой способ; (б) экранируйте их в своем SQL-операторе; точный способ сделать это зависит от используемой базы данных, кандидатами являются скобки, как в [Date], и двойные кавычки, что несколько сложнее получить прямо внутри строки!

:)


PIEBALDconsult

1. Конечно, вы можете. В ADO.net, все проходит через ExecuteReader.
2. Да.
3. Эй, давно не виделись.

Luc Pattyn

Да. Я все еще немного активен здесь, хотя и больше на форуме C#.

candijen

Я ничего не понимал. Почему же тогда второй код не работает? Я использовал ExecuteNonQuerry

Рейтинг:
2

Sweety K

Проверьте, являются ли другие столбцы в базе данных обнуляемыми или нет.

После этого попробуйте код приведенный ниже-
cmd.параметры.AddWithValue("@Date", DateTime.Now.ToShortDateString());
if (con.State == ConnectionState.Закрытый)
{
против.Открыть();
}

результат = cmd.Метод executenonquery();

УМК.Располагать();

если (результат > 0)
{
возвращаемый результат;
}
еще
{
возвращает 0;
}


Рейтинг:
1

Sweety K

что такое тип данных столбца даты в базе данных? Это дата-время или варчар?
во-вторых, Getdate() - это функция в SQL server, а не в c#.

Не могли бы вы объяснить подробнее об этом?


candijen

это дата и время