Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将日期时间值插入SQL Server数据库_C#_Sql_Sql Server_Winforms - Fatal编程技术网

C# 将日期时间值插入SQL Server数据库

C# 将日期时间值插入SQL Server数据库,c#,sql,sql-server,winforms,C#,Sql,Sql Server,Winforms,我正在尝试将日期时间选择器值插入数据库中的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

我正在尝试将日期时间选择器值插入数据库中的
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;

您的代码相当于:

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;

使用企业库,我就是这样做的

 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);
 }
var db=EnterpriseLibraryContainer.Current.GetInstance();
使用(DbCommand command=db.GetStoredProcCommand(“您存储的进程名”))
{
db.AddInParameter(命令“@mydate”,DbType.DateTime,DateTime.Now.Date);//替换为MyDTP01.Value
db.ExecuteNonQuery(命令);
}

使用企业库,我就是这样做的

 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);
 }
var db=EnterpriseLibraryContainer.Current.GetInstance();
使用(DbCommand command=db.GetStoredProcCommand(“您存储的进程名”))
{
db.AddInParameter(命令“@mydate”,DbType.DateTime,DateTime.Now.Date);//替换为MyDTP01.Value
db.ExecuteNonQuery(命令);
}

这里没有任何东西不能与常规ADO.NET完全相同;heck,
cmd.Parameters.AddWithValue(“mydate”,DateTime.Now.Date)也同样容易工作,不需要ent lib(在我考虑过的专业观点中,这是一个架构非常糟糕的库),这里没有任何东西不能与常规ADO.NET完全一样工作;heck,
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),分别更简单。@Brian:我个人更喜欢显式地说明参数类型。我只是觉得利用
Add
的返回值很尴尬,尽管这大概就是它的用途。可能是与
cmd.Parameters.AddWithValue(@mydate,newsqldatetime(MyDTP01.Value))折衷?我承认,如果<代码> Mydtp01。Value是,例如<代码>字符串,但我认为这是一个净正的。布瑞恩:我还是宁愿在我的答案中使用这个模式。我同意你第一次看到它时会有点奇怪,但在那之后,它会毫不费力地准确解释你的意思。除非
MyDTP01.Value
既不是
DateTime
也不是
DateTime?
,否则这有点笨拙<代码>cmd.Parameters.AddWithValue(“@mydate”,MyDTP01.Value)
cmd.Parameters.AddWithValue(“@mydate”,MyDTP01.Value??SqlDateTime.Null),分别更简单。@Brian:我个人更喜欢显式地说明参数类型。我只是觉得利用
Add
的返回值很尴尬,尽管这大概就是它的用途。可能是与
cmd.Parameters.AddWithValue(“@mydate”,新的SqlDateTime(MyDTP01.Value))的折衷?我承认,如果<代码> Mydtp01。Value是,例如<代码>字符串,但我认为这是一个净正的。布瑞恩:我还是宁愿在我的答案中使用这个模式。我同意你第一次看到它时有点奇怪,但在那之后,它就很轻松地解释了你的意思。