2012-02-10 10 views
-1

ここで間違っていることを理解できないので、私は助けが必要です。DateTimeが正しくフォーマットされていない/時間が短縮されている

初期設定:

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

私はMS AccessデータベースにMS SQL Server 2008のからレコードを同期するルーチンを構築しました。テーブルが同一であることが日常の一部テーブルレイアウトやフィールド

の数に来るとき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") + "'"; 

_stTimeInspectedsqlDateTimeとして宣言されています。

何らかの理由で、私はMS Accessデータベーステーブルで日付と時刻を一緒に取得できません。私も使用しようと_dtTimeInspected.Value.ToString("yyyy-MM-dd hh:mm:ss tt")

:私はthis._dtTimeInspected.Value.ToString("yyyy-MM-dd")のような形式を使用すると、私はこれを使用する場合

私は、日付を取得することができ、または this._dtTimeInspected.Value.ToString("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

いただきありがとうございますか!そうすれば、最初にすべての変換を避けることができます... –

+0

私はそれを試みました。私はMS Accessデータベースでクエリを作成しました。同じ結果 –

+0

私はMS Access内でクエリを作成することを提案していませんでした...私は非常に異なるパラメータでクエリを使用することを提案していました。 –

答えて

0

解決策が見つかりました。時間

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

を挿入するにしてもパラメータ化手順なし

を日付と時刻
//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") + "#"; を挿入するには

あなたはパラメータ化されたSQLを使用することはできませんあなたの助け

関連する問題