은 []

2010-01-18 4 views
0

내가 점점 오전 오류 BYTE 형에 INT64에서 매개 변수 값을 변환하지 못했습니다 열 : 나는 그것에 할당 할 때은 []

sessionid | binary(32) | null 

,이 작업을 수행합니다

user.LastActivityDate = DateTime.Now; 
user.SessionId = user.LastActivityDate.ToBinary(); 

세션 ID는 인터페이스에서 상속 된 속성입니다 :

long? SessionId { get; set; } 

를 그리고 여기 내 사용자 클래스에 액세스하고 있습니다 : 내 사용자 지정 프로필 공급자에서

[SettingsAllowAnonymous(false), CustomProviderData("SessionId;string")] 
public long? SessionId { get { return base["SessionId"] as long?; } set { base["SessionId"] = value; } } 

, 다음 명령은 값을 할당합니다

sqlCommand.Parameters.Add("sessionid", SqlDbType.Binary, 32).Value = settingsPropertyValue.PropertyValue; 

"sqlCommand.ExecuteNonQuery()"명령이 저장된 업데이트를 실행하면 매개 변수가있는 프로 시저가 실행됩니다 eter :

"Failed to convert parameter value from a Int64 to a Byte[]."

I가 시도 :

@sessionid binary(32) 

결과는 오류 인

  1. ... = Convert.ToByte (settingsPropertyValue.PropertyValue);
  2. ... = Convert.ToInt64 (settingsPropertyValue.PropertyValue);

아이디어가 있으십니까? 감사.

답변

0

SqlDbType.Binary (매개 변수를 추가 할 때) 올바르지 않습니다. 이는 임의 길이의 확장 이진 데이터를위한 것입니다. 당신은 그냥 SqlDbType.BigInt 인 64 비트 정수로 표현하고 싶습니다.

그런데 왜 처음부터 이렇게하고 있습니까? SQL은 날짜 - 시간 형식을가집니다. 그런 식으로 저장하면됩니다.

는 (당신은 반대, 왜곡 된 방식으로 가야하고 대신 8 바이트의 배열에 긴 변환하고 전달하지만, 그 방식에 저장하고 싶을 더 생각할 이유가 없었다.)

+0

좋습니다, 감사합니다.sqlCommand.Parameters.Add ("sessionid", SqlDbType.BigInt, sizeof (Int64))를 시도했습니다 .Value = settingsPropertyValue.PropertyValue; 그리고 "값은 부호없는 바이트에 비해 너무 크거나 작습니다." 그 모양이 맞습니까? –

+0

SQL Server의 데이터 유형은 무엇입니까? – SLaks

+0

sessionid | 이진 (32) | null –

0

ToBinary 당신이 생각하는대로하지 않습니다.

DateTime.ToBinary 메서드는 바이트 배열이 아닌 long 값을 반환합니다.

무엇을하려하십니까?

datetime을 저장하려는 경우 DataTime 열만 사용해야합니다.

실제로 바이트 배열이 필요한 경우 자세한 정보를 제공하십시오.

+0

감사합니다. 나는 ToBinary가 나에게 긴 가치를주기를 바랄뿐입니다. 본질적으로 긴 sessionId = DateTime.Now.ToBinary를 사용하여 세션 ID를 만듭니다. 그런 다음 DB에 저장하고 검색하고 필요에 따라 다시 DateTime으로 변환합니다. 그러나 나는 그것을 저장하는 방법에 관해서는 혼란스러워지고 있다고 생각한다. –