2017-12-22 13 views
0

私は自分のデータベースにrowversionとして使用されているタイムスタンプ列を持っています。データベースからデータを取り出すときに、私はrow []を取得し、それをbyte []に​​変換します。この段階までは、すべてが期待通りに機能します。how to byte [] to timestamp

データの更新時に、私は(ストアドプロシージャ内で)rowversionが同じかどうかをチェックしたいと思います。これは、データベースに格納されているコードから渡されたものと比較されます。それが違う場合、私は更新を中止します。さもなければ、データを更新します。

今私の問題は、バイト[]をストアドプロシージャに渡す方法です。ストアドプロシージャのパラメータタイプはタイムスタンプです。

注:私はすべてのdb操作をC#でエンタープライズライブラリを使用して行います。ストアドプロシージャやデータ型を変更することはできません。その制限された。

+0

バイトタイムスタンプの形式は何ですか?または、最初にタイムスタンプはどのようにバイト[]になりますか?たぶん[this](https://stackoverflow.com/questions/10107625/6-bytes-timestamp-to-datetime)ですか? – john

+0

タイムスタンプ構文は非推奨です。この機能は、将来のバージョンのMicrosoft SQL Serverでは削除されます。新しい開発作業でこの機能を使用しないでください。現在、この機能を使用しているアプリケーションを変更する予定です。 https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql – Aaron

+0

@john私はdata_rowを取得します。このように、row_versionをバイト配列に変換します。dr ["row_version "] == DBNull.Value?新しいバイト[1]:(バイト[])dr ["row_version"]; – user2645738

答えて

-1

、以下を参照してくださいコード:期待通りのコードの下に

  DateTime now = DateTime.Now; 
      long bNow = now.ToBinary(); 
      byte[] arrayNow = BitConverter.GetBytes(bNow); 

      long getLong = BitConverter.ToInt64(arrayNow, 0); 

      DateTime getNow = DateTime.FromBinary(getLong); 

      Console.WriteLine(getNow.ToLongTimeString()); 
      Console.ReadLine(); 
+0

あなたは私の質問が間違っていると思います。ごめんなさい。私はちょうど私がストアドプロシージャを呼び出すときに、データ型にする必要があります知りたいですか?どのエンタープライズライブラリパラメータタイプがSQL Serverのタイムスタンプにマップされますか? – user2645738

+0

データベースのタイムスタンプの場合は、DateTime型を使用する必要があります。 – jdweng

+0

私たちはできません。私のために働く下記の解決策を見てください。 – user2645738

0

は、コードの上

public static TestMethod(....,byte[] rowVersion) 
{ 
    ......... 
    dbConnection_.AddInParameter(dbcommand, "@row_version", DbType.Binary,rowVersion); 
    ........... 
} 

を働く企業のライブラリを使用しています。私はこれが誰かを助けると思う。

ここでお手伝いしてくださったみなさん、ありがとうございます。乾杯..!