2009-10-16 136 views
5

我使用C#從MS Access讀取/更新數據。 我的代碼是:標準表達式中的數據類型不匹配| Access,OleDb,C#

public static void UpdateLastLogin(int userid, DateTime logintime) ///logintime = DateTime.Now 
{ 
    string sql = @"UPDATE [Customers] SET [LastLogin]=?"; 
    OleDbParameter[] prms = new OleDbParameter[] { 
    new OleDbParameter("@LastLogin",logintime) 
    }; 
    using (DAL dal = new DAL()) 
    { 
     dal.UpdateRow(sql, false, prms); 
    } 
} 

當涉及到日期,我有麻煩。 這會引發「標準表達式中的數據類型不匹配」。錯誤。 (爲了保持簡單,我刪除了WHERE子句) 我是否願意附上[LastLogin] =?帶單引號的問號,#號..並沒有幫助。 有關如何處理Access和OleDb提供程序的DateTime對象的任何線索將不勝感激。

在此先感謝。

+0

碼位會更容易閱讀解決。如果你通過它縮進4個空格 – 2009-10-16 12:58:24

回答

0

首先,沒有你的SQL語句應該是:

"UPDATE Customers SET [email protected]" 

其次,原因您收到的日期不匹配錯誤可能會是您的通過「?」作爲進入LastLogin字段的日期時間而不是實際的登錄時間參數。

+0

格式化爲代碼,但是,這是訪問..我因子評分使用一個OleDbCommand – emre 2009-10-16 13:03:07

+0

上面的語句應該是確定假設你..不過,他們表演只有日期不是時間:) – James 2009-10-16 13:07:30

0

也許嘗試

DateTime.Now.ToShortDateString() + ' ' + DateTime.Now.ToShortTimeString() 

而是把它作爲字符串(也許用#包圍當時)

+1

我沒有OLEDB不支持命名參數:( – emre 2009-10-16 13:06:20

+0

也許一個格式字符串傳遞給DateTime的ToString()將有助於 – emre 2009-10-16 13:06:55

+0

編輯我的文章...應該工作。有可能更優雅的方式來做到這一點,因爲這可能取決於您的本地化選項,但... – 2009-10-16 13:14:27

0

豈不是

"UPDATE Customers SET LastLogin='@LastLogin'" 

而且@LastLogin應該

logintime.ToString("yyyy-MM-dd hh:mm:ss") 

編輯 難道你不只是內聯整個事情?

"UPDATE Customers SET LastLogin='" + logintime.ToString("yyyy-MM-dd hh:mm:ss") + "'" 
+0

你可以聯合整個事情,是的,但創建動態sql是一個不好的習慣。 使用參數是更好的設計,同樣易於閱讀。 – 2011-07-11 23:21:53

0

嘗試設置的參數「DBTYPE」屬性來識別它作爲一個日期,日期時間或DATETIME2適當...

prms[0].DbType = DbType.DateTime; 

有7個簽名的新OleDbParameter()調用,所以你可以改變簽名實例,或者只是明確地按照上面的樣例進行抽樣,因爲在這種情況下你只有1個參數。

4

OleDb和日期存在已知問題。嘗試做類似:

OleDbParameter p = parameter as OleDbParameter; 
if (null == p) 
    parameter.DbType = DbType.DateTime; 
else 
    p.OleDbType = OleDbType.Date; 

或者使用明確的格式字符串:

value.ToString("yyyy-MM-dd hh:mm:ss") 
1

我這個使用下面的代碼

OleDbCommand cmd = new OleDbCommand(qry, cnn); 
cmd.Parameters.Add("datenow", OleDbType.Date); 
cmd.Parameters["datenow"].Value = DateTime.Now; 
相關問題