C# 在';年月日';格式

C# 在';年月日';格式,c#,C#,我已经在很多网站上问过这个问题,但我的问题仍然没有得到回答。有些人建议我对maskedtextbox使用datetimepicker datetimepicker确实解决了所有类型的日期相关问题,而masked textbox返回字符串,这就是为什么它在C#中的参数化sql查询中创建日期时间转换问题 在大多数情况下,由于耗时问题,我们不使用datetimepicker。我的意思是,若有上千个数据输入等待处理,若我们使用datetimepicker,那个么鼠标和键盘之间的指针是分开的。因此,在我的

我已经在很多网站上问过这个问题,但我的问题仍然没有得到回答。有些人建议我对maskedtextbox使用datetimepicker

datetimepicker确实解决了所有类型的日期相关问题,而masked textbox返回字符串,这就是为什么它在C#中的参数化sql查询中创建日期时间转换问题

在大多数情况下,由于耗时问题,我们不使用datetimepicker。我的意思是,若有上千个数据输入等待处理,若我们使用datetimepicker,那个么鼠标和键盘之间的指针是分开的。因此,在我的例子中,我总是使用maskedtextbox,这会造成日期转换的问题。我试着用以下方法来解决这个问题:

String sql="insertintodummy(name,date)values(@name,convert(datetime,'"+maskedTextBox1.text+"', 103)"; //  for 'dd/mm/yyyy' format.
sqlcommand cmd=new sqlcommand(sql,con);
cmd.parameters.Add("@name",SqldbType.Varchar).Value= textbox1.text;
cmd.ExecuteNonQuery();
我认为在使用C#,VS-2005的参数化查询中无法使用上述日期时间转换

上述代码在只有datefield必须输入方式的情况下非常有用。如果有比这更好的方法,请建议

现在它是下面的完美解决方案

string sql="insert into dummy(name,date)values(@name,@date)";

IFormateprovider Culture = new CultureInfo("fr-FR",True);

DateTime mydate=DateTime.parse(
maskedtextbox1.text,Culture,DateTimeStyles.NocurrentDateDefault
);

sqlcommand cmd=new sqlcommand(sql,con);

cmd.Parameters.Add(@name,SqlDbtypes.Varchar).Values= Textbox1.text;

cmd.Parameters.Add(@date, SqlDbtypes.Datetime).Values=mydate;

cmd.ExecuteNonQuery();

谢谢。

当有一个非常好的参数与
SqlDbType.DateTime
配合使用时,为什么要在Sql中进行转换(和风险注入,只对查询进行部分参数化?):

string sql = "insert into dummy (name, date) values (@name, @date)";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.Add("@name", SqldbType.Varchar).Value = textbox1.text;
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = Convert.ToDateTime(maskedTextBox1.Text);
cmd.ExecuteNonQuery();
明显的警告:

  • 不检查maskedTextBox1.Text是否确实包含日期时间(
    DateTime.TryParse
  • 不检查提供的日期时间是否在SqlDbType.DateTime处理的日期时间范围内

DateTime enterDate=newdatetime有什么问题(maskedTextBox1.Text)?@lazarus先生,这是通过编译类似“字符串长”+1的错误实现的。在将字符串发送到数据库之前,必须对其进行转换。DateTime.ParseExact和DateTime.TryParseExact方法可以让您更好地控制如何从字符串转换日期。@Rob,先生,您的代码似乎像sql一样对日期格式进行精确排序。我的意思是sql日期格式是mm/dd/yyyy格式,您输入的dd/mm/yyyy格式有误。@Guffa先生,我已经按照您的建议尝试过了,但是先生转换失败。先生,我使用的是c#,vs-2005,但没有找到解决方案。如果你提供的话,先生,欢迎你。请帮帮我。@mahesh:SQL Server使用的日期格式是不相关的,因为日期是在C#代码中解析的,所以它是所用计算机的默认日期格式。您可以使用
DateTime.ParseExact(textbox1.text,“dd'/'MM'/'yyyyy”,CultureInfo.InvariantCulture)
来解析字符串。@Guffa先生,您提供的IFromatProvider在vs-2005中不可用,我是说CultureInfo.InvariantCulture