2012-10-04 64 views
0

在Windows應用程序我有我嘗試插入當前日期在我的mysql數據庫下面vb.net INSERT CURDATE()到MySQL的問題

查詢的查詢:

SqlVentaCasas1 = "INSERT INTO VentaCasasHistory (ID, Direccion, Estatus, Precio, " & _ 
           "NumeroDias, FechaHoy, Agente, Compania, Unidad, Ciudad) VALUES ('" & _ 
           AddIDCasas2 & "','" & AddDireccionCasas2 & "','" & AddEstatusCasas2 & "'," & AddPrecioCasas2 & ", 0, CURDATE(), '" & AgenteNameCasas2 & "','" & AgenteCompaniaCasas2 & "', '" & AddUnidadCasas2 & "', '" & AddCiudadCasas2 & "');" 


         CommandVentaCasas1 = New MySqlCommand(SqlVentaCasas1, con) 
         CommandVentaCasas1.CommandType = CommandType.Text 
         CommandVentaCasas1.ExecuteNonQuery() 

當我輸入我想插入到MySQL的一切都運行平穩,除了當我檢查數據庫輸入的日期,我發現自己與另一方面,我發現自己與另一方面,當我從PHPmyAdmin運行相同的查詢

INSERT INTO `VentaCasasHistory`(`ID`, `Direccion`, `Estatus`, `Precio`, `NumeroDias`, `FechaHoy`, `Agente`, `Compania`, `Unidad`, `Ciudad`) VALUES ([String1],[String2],[String3],[Integer1],[Integer2],CURDATE(),[String4],[String5],[String6],[String7]) 

其中FechaHoy是CURDATE()是插入正確的日期應該是。

我似乎無法找到什麼問題,據我瞭解,它只會插入如果日期時輸入錯誤。

我保持兩個查詢「相同」的原因是爲了理解我做錯了什麼,我知道他們可以接受SQL注入。

你的幫助將非常感激。

利奧P.

這是代碼我有,你告訴我的最後一塊。

Dim StringDate As String 

    StringDate = Date.Today.ToString("yyyy-MM-dd") 

SqlVentaCasas1 = "INSERT INTO VentaCasasHistory (ID, Direccion, Estatus, Precio, " & _ 
           "NumeroDias, FechaHoy, Agente, Compania, Unidad, Ciudad) VALUES ('" & _ 
           AddIDCasas2 & "','" & AddDireccionCasas2 & "','" & AddEstatusCasas2 & "'," & AddPrecioCasas2 & ", 0, STR_TO_DATE('" & StringDate & "', GET_FORMAT(DATE,'ISO')), '" & AgenteNameCasas2 & "','" & AgenteCompaniaCasas2 & "', '" & AddUnidadCasas2 & "', '" & AddCiudadCasas2 & "');" 

不幸的是,它不工作,我仍然得到的0000-00-00。

+0

使用參數化查詢的一個原因是爲了避免注入式攻擊 - 另一個原因是它允許您指定參數的類型。 您是否嘗試過參數化併爲日期字段指定正確的數據類型? 此外 - 你可以通過調試器並粘貼它正在運行的最終SQL查詢? – Origin

+0

@Origin MySql.Data.MySqlClient.MySqlException(0x80004005):從流中讀取失敗。 --- & gt; System.IO.EndOfStreamException:試圖讀取流的結尾。 – TopoX

回答

2

CURDATE()實際上應該指定爲CREATE TABLE中使用的默認值。換句話說,您不需要將其作爲查詢的一部分,因爲當您插入新記錄時,默認值設置爲CURDATE()的字段將自動插入日期。

F.ex:

CREATE TABLE MyTable 
(
    ID int NOT NULL, 
    MyName varchar(30) NOT NULL, 
    MyDate datetime NOT NULL DEFAULT CURDATE(), 
    PRIMARY KEY (ID) 
) 

INSERT INTO MyTable (MyName) VALUES ('Epistemex') 

請問MyDate字段設置爲CURDATE()

希望這會有所幫助。

+0

的確有助於瞭解熱點創建表格,但不知道如何插入包含日期的數據 – TopoX

+0

我還添加了一個插入的例子 - 點是你不需要提供日期(當前日期),當它被定義爲表中的默認值時本身。如果你看看我的插入,你將無法在任何地方看到MyDate。這是因爲它在服務器上自動處理(假定CURDATE()是您特別要求的)。 – K3N

+0

有些人希望提供日期。如果您要插入100,000行,那麼讓數據庫計算一個日期100,000次會浪費資源。或者,也許您希望報告的所有條目都顯示相同的「DateCreated」值。 – Origin