Вставьте значение даты и времени в базу данных SQL Server

1

Я пытаюсь вставить значение времени выбора даты в столбец DATETIME в моей базе данных.

Вот мой код..

 myconstr = "Data Source=wind;Initial Catalog=TestDB;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False";
 myquery = "INSERT INTO DateTimeTB(MyDate) VALUES (@mydate)";

 using (SqlConnection connection = new SqlConnection(myconstr))
 {
     SqlCommand cmd = new SqlCommand(myquery);
     cmd.CommandType = CommandType.Text;
     cmd.Connection = connection;
     cmd.Parameters.Add(new SqlParameter("@mydate", SqlDbType.DateTime).Value = MyDTP01.Value);
     connection.Open();
     cmd.ExecuteNonQuery();
     connection.Close();
 }

Это дает мне следующую ошибку.

Коллекция параметров SQL принимает только ненулевые объекты типа SqlParameter, а не объекты времени даты.

Как я могу это исправить..?

Теги:
sql-server
winforms

2 ответа

6
Лучший ответ

Ваш код эквивалентен:

var parameter = new SqlParameter("@mydate", SqlDbType.DateTime);
var value = MyDTP01.Value;
parameter.Value = value;
cmd.Parameters.Add(value);

Вы хотите добавить параметр, а не значение. Так:

cmd.Parameters.Add(new SqlParameter("@mydate", SqlDbType.DateTime)).Value = MyDTP01.Value;

Обратите внимание на расположение скобок.

Это может быть упрощено, однако - вам не нужно вызывать конструктор SqlParameter самостоятельно - вы можете просто передать имя и тип для Add:

cmd.Parameters.Add("@mydate", SqlDbType.DateTime).Value = MyDTP01.Value;
  • 0
    Если MyDTP01.Value является ни DateTime ни DateTime? Это немного громоздко. cmd.Parameters.AddWithValue("@mydate", MyDTP01.Value); и cmd.Parameters.AddWithValue("@mydate", MyDTP01.Value ?? SqlDateTime.Null); соответственно проще.
  • 0
    @ Брайан: Я предпочитаю явно указывать тип параметра лично.
Показать ещё 2 комментария
-2

Использование Enterprise Library, вот как я это делаю

 var db = EnterpriseLibraryContainer.Current.GetInstance<Database>();
 using( DbCommand command = db.GetStoredProcCommand("Your Stored proc name"))
 {
   db.AddInParameter(command, "@mydate", DbType.DateTime, DateTime.Now.Date); // Replace with MyDTP01.Value
   db.ExecuteNonQuery(command);
 }
  • 3
    Здесь нет ничего, что не будет работать одинаково с обычным ADO.NET; cmd.Parameters.AddWithValue("mydate", DateTime.Now.Date); , cmd.Parameters.AddWithValue("mydate", DateTime.Now.Date); будет работать так же легко, без необходимости ent-lib (что, по моему мнению, профессионально - очень плохо спроектированная библиотека)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню