![](/img/trans.png)
[英]What's the correct SQL query to retrieve date field without time? C# MS Access
[英]Insert date-time from c# in sql server without parametrized query's
我正在开发一个相当古老的应用程序,当时没有使用参数化查询。
我必须在sql
表的一列中插入日期时间值,数据类型为date-time
,该列中不允许使用空值。
我的代码。
var expires = dtpExpires.Enabled ? dtpExpires.Value.ToString() : "'1/1/1900 12:00:00 AM'";
string query = "INSERT INTO route (expires) Values ("+ expires +")";
问题在于,当日期选择器被禁用时,必须传递一个默认值,因为 null 是不允许的。 因此,为此我必须包含一个额外的''
来环绕日期并且它可以正常工作。
但是当日期选择器被启用并且有效的日期时间试图插入到数据库中时,它会由于缺少''
而失败,这包裹在expires
变量周围。
在没有参数化查询的情况下,是否有任何干净的方法可以做到这一点。 更新代码时也会出现同样的问题。 是否可以有一种干净的方法来处理这两种情况,而不是只添加if-else
子句。
编辑
避免“无法确定条件表达式的类型,因为‘string’和‘System.DBNull’之间没有隐式转换”
SqlCommand command = new SqlCommand("INSERT INTO route (expires)
Values (@dtpExpires)", connections);
SqlParameter dtpExpires= new SqlParameter("@dtpExpires", SqlDbType.DateTime, 10);
dtpExpires.Value = dtpExpires.Enabled ? dtpExpires.Value : DBNull.Value;
command.Parameters.Add(dtpExpires);
给你信息 OP@ankur
笔记
最好使用 pram 查询来避免 sql 注入攻击。
由于您将日期时间和空数据作为字符串发送,因此使用 CONVERT 函数让 sql server 处理从字符串到日期时间的转换
var expires = dtpExpires.Enabled ? "'" + tpExpires.Value.ToString() + "'" : "null";
string query = "INSERT INTO route (expires) Values (CONVERT(datetime, " + expires + "))";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.