2012-12-23 94 views
1

我正在訪問,但插入具有日期時間的查詢插入。像這些查詢不適合我。插入訪問日期

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', '#12/12/23 18:46:38+20#', '0', 'T', 'F', '+923468280124'); 

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', #'12/12/23 18:46:38+20'#, '0', 'T', 'F', '+923468280124'); 

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', '12/12/23 18:46:38+20', '0', 'T', 'F', '+923468280124'); 

enter image description here

任何想法?什麼可能是錯的。

這是我在C#代碼:

con = new OleDbConnection(ConnStr); 
con.Open(); 

cmd = con.CreateCommand(); 
cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], 
[fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('" + genset_id + "', '" + rec_time + "', '" + fuel_level + "', '" + 
grid_electricity + "', '" + genset_electricity + "', '" + genset_number + "');"; 
cmd.ExecuteNonQuery(); 

我自己也嘗試這個。

cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], 
[fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('" + genset_id + "', @rec_t, '" + fuel_level + "', '" + grid_electricity 
+ "','" + genset_electricity + "', '" + genset_number + "');"; 
cmd.Parameters.Add("@rec_t", OleDbType.DBTimeStamp).Value 
           = DateTime.Parse(rec_time); 

所有其他的插入和選擇查詢工作正常

+0

可以請你說明你的OLEDB命令代碼看起來像什麼也檢查數據庫,並讓我們知道什麼數據類型設置爲' – MethodMan

+0

不能得到你嗎?你的意思是C#代碼? – sharafjaffri

+0

是日期字段數據類型DateTIme還是Text也是時間字段的問題..? – MethodMan

回答

1

INSERT查詢有不止一個問題。我複製從您的評論此版本DJ:

INSERT INTO tbl_fuel_levels (
    [genset_id], 
    [rec_time], 
    [fuel_level], 
    [grid_electricity], 
    [genset_electricity], 
    [genset_number] 
    ) 
VALUES (
    '001', 
    '#12/11/2023 2:46:38 PM#', 
    '0', 
    'T', 
    'F', 
    '+923468280124' 
    ); 

的問題是:

  1. 您正在嘗試插入字符串,'#12/11/2023 2:46:38 PM#'到日期/時間字段rec_time。棄單引號,使該值的日期/時間文本,而不是一個字符串:#12/11/2023 2:46:38 PM#
  2. 您正在嘗試字符串,'T'插入是/否字段grid_electricity。改用True而不用引號。
  3. 您正試圖將字符串'F'插入到是/否字段genset_electricity中。這與問題2相同。使用False不含引號。

使用Access的查詢設計器來創建一個新的查詢。切換到SQL視圖並粘貼在此聲明:

INSERT INTO tbl_fuel_levels (
    [genset_id], 
    [rec_time], 
    [fuel_level], 
    [grid_electricity], 
    [genset_electricity], 
    [genset_number] 
    ) 
VALUES (
    '001', 
    #12/11/2023 2:46:38 PM#, 
    '0', 
    True, 
    False, 
    '+923468280124' 
    ); 

如果有這種說法的任何遺留的問題,解決它們出訪問與c#擔心代碼來創建語句之前。

或更好的是,使用參數查詢方法。也許你可以通過「是/否」字段解決這些問題來解決問題。

0

我建議以下這樣可以先這樣我們可以判斷插入失敗在什麼領域陷阱精確例外。我想你逝去的日期是奇數嘗試通過「MM/DD/YYY HH:MM:SS」

try 
{ 

    con = new OleDbConnection(ConnStr); 
    con.Open(); 

    cmd = con.CreateCommand(); 
    cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) VALUES('" + genset_id + "', '" + rec_time + "', '" + fuel_level + "', '" + grid_electricity + "', '" + genset_electricity + "', '" + genset_number + "');"; 
    cmd.ExecuteNonQuery(); 

} 
catch (OleDBException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

如果您決定使用AddWithParameters(),你可能想嘗試這樣的事情

方法
cmd.Parameters.AddWithValue("?", DateTime.Parse("12/11/2023 2:46:38")); 

或做它會是這樣的

"INSERT INTO tbl_fuel_levels[genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", genset_id, rec_time, fuel_level, grid_electricity, genset_electricity, genset_number)"; 

我會建議創建變量和分配值的變量的正確方法

創建和分配變量這些值 這樣你不必在所有逗號中都有這樣一個令人討厭的插入語句

genset_id,rec_time,fuel_level,grid_electricity,genset_electricity,genset_number

+0

System.Data.OleDb.OleDbException:標準表達式中的數據類型不匹配 – sharafjaffri

+0

我的查詢INSERT INTO tbl_fuel_levels([genset_id],[rec_time],[fuel_level],[grid_electricity],[genset_electricity],[genset_number])VALUES('001 ','#12/11/2023 2:46:38 PM#','0','T','F','+923468280124'); – sharafjaffri

+0

您在做Selects時通常會使用#號。我認爲您不需要它Date – MethodMan

2

試試這個

try 
{ 

    con = new OleDbConnection(ConnStr); 
    con.Open(); 

    cmd = con.CreateCommand(); 
    cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES(?,?,?,?,?,?)"; 
cmd.Parameters.AddWithValue("@id",id); 

cmd.Parameters.AddWithValue("@date",DateTime.Parse("12/12/2009 11:34:55")); 
    cmd.ExecuteNonQuery(); 

} 
catch (OleDBException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

更新:

如果您使用的是Access 2010,那麼你也可以使用MSACCESS存儲過程。請參見本文的詳細How do I make a stored procedure in MS Access?

+0

OleDB並不真正使用參數名稱,它是基於索引的,這就是爲什麼您可以將每個參數的問號作爲參數傳遞給名字。您必須確保您的參數與查詢語句的順序相同。 – MethodMan

+0

@DJKRAZE:是的,參數必須對齊。你是對的。 –

0

要在MSACCESS查詢格式的日期,你只使用#符號:

#12/12/23 18:46:38+20#