我要在数据库中插入当前的day
,month
和year
。
format
必须为:YYYY-MM-DD
。这该怎么做?我在表中使用数据类型'date'。它必须与数据库中的值相同。我使用C#。
现在我得到了错误:“将数据类型nvarchar转换为日期时出错”
代码:
string datenow = DateTime.Now.ToString("yyyy-mm-dd");
我使用存储过程来添加日期值(和其他一些东西):
conn.Open();
SqlCommand cmd = new SqlCommand("spAddContentment", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@question", SqlDbType.VarChar, 220);
cmd.Parameters.AddWithValue("@employeeid", Variabels.employeeid);
cmd.Parameters.AddWithValue("@score", SqlDbType.Char).Value = score;
cmd.Parameters.AddWithValue("@comment", SqlDbType.VarChar).Value = TextBxComment.Text;
cmd.Parameters.AddWithValue("@date", SqlDbType.Date).Value = datenow;
cmd.ExecuteNonQuery();
答案 0 :(得分:5)
替换
cmd.Parameters.AddWithValue("@date", SqlDbType.Date).Value = datenow;
使用
cmd.Parameters.AddWithValue("@date", SqlDbType.Date).Value = DateTime.Now;
自
现在我得到了错误:“将数据类型nvarchar转换为日期时出错”
表示您尝试插入字符串,但是该过程需要一个日期。
如果要跳过时间部分,可以使用DateTime.Now.Date
或DateTime.Today
答案 1 :(得分:1)
格式必须为:YYYY-MM-DD
不!!
此处的日期应存储为类型化的值-可能是类型date
(无时间部分)或datetime
。现在;就是这样:日期值没有格式。它实际上只是一个数字。甚至问“将int
存储为什么(文本)格式也将是不正确的”,甚至问“我的日期存储为什么(文本)格式”根本是不正确的。很简单:不是,因为它不是文本。
如果您将日期(或整数)存储为文本(例如,在某种[n][var]char(...)
列中):这是一个问题,并且可能导致巨大的混乱和问题,效率低下-包括排序,过滤问题和i18n / l10n问题。
相反:将列声明为date
或datetime
,并使用.NET中的键入值填充它,例如,将SQL参数传递为.NET {{ 1}}。 ADO.NET DateTime
层知道如何连接这些东西,所有正确的魔术都会发生。
仅当您以某种方式实际显示日期时,询问格式才正确。例如,完全正确地提出以下要求:
我有一个从数据库中获得的
SqlClient
值;我应该在网页中使用哪种显示格式来显示它?
重要的一点是:现在,这是一个 display 关注,而不是 storage 关注。