Я пытаюсь вставить значение времени выбора даты в столбец 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, а не объекты времени даты.
Как я могу это исправить..?
Ваш код эквивалентен:
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;
Использование 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);
}
cmd.Parameters.AddWithValue("mydate", DateTime.Now.Date);
, cmd.Parameters.AddWithValue("mydate", DateTime.Now.Date);
будет работать так же легко, без необходимости ent-lib (что, по моему мнению, профессионально - очень плохо спроектированная библиотека)
MyDTP01.Value
является ниDateTime
ниDateTime?
Это немного громоздко.cmd.Parameters.AddWithValue("@mydate", MyDTP01.Value);
иcmd.Parameters.AddWithValue("@mydate", MyDTP01.Value ?? SqlDateTime.Null);
соответственно проще.