![](/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.