2012-02-10 48 views
-1

我需要幫助,因爲我無法理解我在這裏做錯了什麼。DateTime格式不正確/時間正在被截斷

初始設置:

MS Access database (.mdb). 
MS Office 2010 installed. 
MS SQL Server 2008 

我建立例程從MS SQL Server 2008的記錄同步到MS Access數據庫。表是相同的,當涉及到表的佈局和字段

常規的部分數量有一個INSERT SQL聲明

和部分SQL語句的代碼

//Query to execute 
cmdToExecute.CommandText = "INSERT INTO " + tableName + 
    "(EquipmentID, TimeInspected) VALUES(" + 
    "'" + this._strEquipmentId.ToString() + "'," + 
    "'" + this._dtTimeInspected.Value.ToString("yyyy-MM-dd hh:mm:ss tt") + "'"; 

_stTimeInspected被聲明爲sqlDateTime的。

出於某種原因,我無法在MS Access數據庫表中獲得日期和時間。

當我使用的格式類似this._dtTimeInspected.Value.ToString("yyyy-MM-dd")我可以得到日期,或 this._dtTimeInspected.Value.ToString("hh:mm:ss tt")我能得到時間

但由於某種原因時被截斷時,我用這個:_dtTimeInspected.Value.ToString("yyyy-MM-dd hh:mm:ss tt")

我甚至嘗試使用參數化查詢

PARAMETERS [@EquipmentID] Text (255), [@TimeInspected] DateTime; 
INSERT INTO VisualInspectionHistory (EquipmentID, , DateInspected, TimeInspected, RecordIsUpdated, DateSync, TimeSync) 
SELECT [@EquipmentID] AS Expr1, [@TimeInspected] AS Expr2 

    /// <summary> 
    /// Purpose: Insert new record into database table 
    /// </summary> 
    /// <returns></returns> 
    /// <remarks></remarks> 
    public override bool Insert() 
    { 

     OleDbCommand cmdToExecute = new OleDbCommand(); 
     cmdToExecute.CommandText = "VisualInspection_Insert"; 
     cmdToExecute.CommandType = CommandType.StoredProcedure; 

     cmdToExecute.Connection = conMainConnection; 

     try 
     { 

      cmdToExecute.Parameters.Add(new OleDbParameter("@EquipmentID", (OleDbType)OleDbType.VarChar, 25)).Value = _strEquipmentID.ToString(); 
      cmdToExecute.Parameters.Add(new OleDbParameter("@TimeInspected", (OleDbType)OleDbType.Date)).Value = (DateTime)(_dtTimeInspected); 


      if (bMainConnectionIsCreatedLocal) 
      { 
       //Open connction 
       conMainConnection.Open(); 
      } 
      else 
      { 
       if (cpMainConnectionProvider.IsTransactionPending) 
       { 
        cmdToExecute.Transaction = cpMainConnectionProvider.CurrentTransaction; 
       } 
      } 

      //Execute query 
      iRowsAffected = cmdToExecute.ExecuteNonQuery(); 

      return true; 
     } 
     catch (OleDbException ex) 
     { 
      //Some error occured. Bubble it to caller and encapsulate Exception object 
      throw ex; 
     } 
     catch (Exception ex) 
     { 
      //Some error occured. Bubble it to caller and encapsulate Exception object 
      throw ex; 
     } 
     finally 
     { 
      if (bMainConnectionIsCreatedLocal == true) 
      { 
       //Close connection 
       conMainConnection.Close(); 
      } 
      cmdToExecute.Dispose(); 


     } 
    } 

任何幫助將不勝感激。

+1

不能使用參數化的SQL?這樣你就可以避免所有的轉換... – 2012-02-10 20:10:32

+0

我試過了。我在MS Access數據庫中創建了查詢。同樣的結果 – 2012-02-10 20:14:53

+0

我不是建議在MS Access中創建查詢...我建議使用帶有參數的查詢,這是非常不同的。 – 2012-02-10 20:17:49

回答

0

我找到了解決方案。

要插入日期和時間
//Query to execute cmdToExecute.CommandText = "INSERT INTO " + tableName + "(EquipmentID, TimeInspected) VALUES(" + "'" + this._strEquipmentId.ToString() + "'," + "#" + this._dtTimeInspected.Value.ToString("yyyy/MM/dd hh:mm:ss tt") + "#"; 即使沒有參數化的過程

要插入時間

`//Query to execute 
cmdToExecute.CommandText = "INSERT INTO " + tableName + 
"(EquipmentID, TimeInspected) VALUES(" + 
"'" + this._strEquipmentId.ToString() + "'," + 
"#" + this._dtTimeInspected.Value.ToString("hh:mm:ss tt") + "#";` 

謝謝您的幫助