C# 在';年月日';格式
我已经在很多网站上问过这个问题,但我的问题仍然没有得到回答。有些人建议我对maskedtextbox使用datetimepicker datetimepicker确实解决了所有类型的日期相关问题,而masked textbox返回字符串,这就是为什么它在C#中的参数化sql查询中创建日期时间转换问题 在大多数情况下,由于耗时问题,我们不使用datetimepicker。我的意思是,若有上千个数据输入等待处理,若我们使用datetimepicker,那个么鼠标和键盘之间的指针是分开的。因此,在我的例子中,我总是使用maskedtextbox,这会造成日期转换的问题。我试着用以下方法来解决这个问题:C# 在';年月日';格式,c#,C#,我已经在很多网站上问过这个问题,但我的问题仍然没有得到回答。有些人建议我对maskedtextbox使用datetimepicker datetimepicker确实解决了所有类型的日期相关问题,而masked textbox返回字符串,这就是为什么它在C#中的参数化sql查询中创建日期时间转换问题 在大多数情况下,由于耗时问题,我们不使用datetimepicker。我的意思是,若有上千个数据输入等待处理,若我们使用datetimepicker,那个么鼠标和键盘之间的指针是分开的。因此,在我的
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.ParseExact(textbox1.text,“dd'/'MM'/'yyyyy”,CultureInfo.InvariantCulture)
来解析字符串。@Guffa先生,您提供的IFromatProvider在vs-2005中不可用,我是说CultureInfo.InvariantCulture