我在很多网站上都提过这个问题,我的问题仍未得到答复.有些人建议我对maskedtextbox使用datetimepicker.
确实,datetimepicker解决了所有与日期相关的问题,而屏蔽文本框返回一个字符串,这就是为什么它在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();
Run Code Online (Sandbox Code Playgroud)
我认为没有办法在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();
Run Code Online (Sandbox Code Playgroud)
谢谢.
为什么在有一个非常好的参数时只需要使用Sql中的转换(以及仅通过部分参数化查询来进行风险注入)SqlDbType.DateTime:
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();
Run Code Online (Sandbox Code Playgroud)
明显的警告:
DateTime.TryParse)