2017-12-22 26 views
0

rowversion으로 사용되는 데이터베이스에 타임 스탬프 열이 있습니다. 데이터베이스에서 데이터를 가져올 때 우리는 rowversion을 얻었고,이 rowversion을 byte []로 변환했습니다. 이 단계까지는 모든 것이 예상대로 작동합니다.timestamp에 byte []하는 방법

데이터를 업데이트 할 때 나는 (저장 프로 시저에서) rowversion이 동일하거나 아닌지 확인하고 싶습니다. 이는 데이터베이스에 저장된 것과 코드에서 전달되는 것과 비교됩니다 . 다른 경우 업데이트를 중단하고 그렇지 않으면 데이터를 업데이트합니다.

내 문제는, 바이트 [] 저장 프로 시저로 전달하는 방법입니다. 저장 프로시 듀어의 매개 변수 유형은 시간 소인입니다.

참고 : 나는 엔터프라이즈 라이브러리를 사용하여 모든 db 작업을 C#으로 만듭니다. 저장 프로 시저 또는 데이터 유형을 변경할 수 없습니다. 그것의 제한된. 아래

+0

바이트 타임 스탬프 형식이란 무엇입니까? 아니면, 타임 스탬프가 처음에 byte []가되는 방법은 무엇입니까? 아마 [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 나는 row_version을 다음과 같이 바이트 배열로 변환하는 datarow를 얻습니다. dr [ "row_version "] == DBNull.Value? 새로운 바이트 [1] : (byte []) dr [ "row_version"]; – user2645738

답변

-1

참조 코드 : 기업 라이브러리를 사용하고있는 코드 위

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

을 예상대로

  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

코드 아래 작동합니다. 나는 이것이 누군가를 도울 것이라고 생각한다.

도움을 주신 여러분 모두 감사드립니다. 건배..!