C# c smalldate传递到sql server进程

C# c smalldate传递到sql server进程,c#,C#,我试图将日期传递给sql过程,时间被传递,导致过程失败,因为时间不匹配,c正在传递日期12:00:00数据库显示日期00:00:00 这是我的代码 public class datetime dt_value; 从javascript日历获取日期 DT_Value = Convert.ToDateTime(Request.Form["TextBox_Tracking_ImportDate"]); 尝试转换为mm/dd/yyyy string DT_Value2 = DT_Value.ToSt

我试图将日期传递给sql过程,时间被传递,导致过程失败,因为时间不匹配,c正在传递日期12:00:00数据库显示日期00:00:00

这是我的代码

public class
datetime dt_value;
从javascript日历获取日期

DT_Value = Convert.ToDateTime(Request.Form["TextBox_Tracking_ImportDate"]);
尝试转换为mm/dd/yyyy

string DT_Value2 = DT_Value.ToString("ddMMyyyy");
将日期传递给sql

cmd.Parameters.Add(new SqlParameter("@import_date", DT_Value2));


ERROR: Error converting data type nvarchar to smalldatetime.
直接传递日期时间就行了

cmd.Parameters.AddWithValue("@import_date", DT_Value);

请参见

这是第一个问题:

string DT_Value2 = DT_Value.ToString("ddMMyyyy");
cmd.Parameters.Add(new SqlParameter("@import_date", DT_Value2));
您正在执行一个无意义的字符串转换,因此会破坏数据。不要这样做。尽可能避免字符串转换

直接传递日期时间:

cmd.Parameters.Add(new SqlParameter("@import_date", DT_Value));
或者更好,显式指定类型:

cmd.Parameters.Add("@import_date", SqlDbType.Date).Value = DT_Value;
或者直接从DateTime中提取日期部分:


不过,老实说,如果SQL代码实际上知道参数是日期而不是日期时间,那么甚至不应该有时间部分的概念。如果您可以发布SQL,这将帮助我们诊断这方面的问题。找到正确的使用类型非常重要-它使生活变得更加简单。

出于兴趣,调用TstringDmmyyyy会以何种方式尝试转换为mm/dd/yyyyy?感谢John,下面是sql procALTER过程[dbo]。[dddddddddddddddd\u id\u MERGE]claim\u id nvarchar15,导入日期smalldatetime作为开始选择TrackingStatus,PRF1,PRF2、PRF3、注释、备用、SpareFinished、成员ID来自dbo.ClosedClaims\u MERGE NOLOCK,其中claim\u ID=claim\u ID,date\u imported=import\u date END
cmd.Parameters.Add("@import_date", SqlDbType.Date).Value = DT_Value.Date;