2010-01-18 70 views
0

我收到錯誤:未能參數值從Int64類型轉換爲字節[]

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

下面是我在做什麼...

我有一個表在我的數據庫列:

sessionid | binary(32) | null 

當我分配給它,我這樣做:

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

的SessionID是從一個接口繼承的財產:

long? SessionId { get; set; } 

這裏,它在我的User類被訪問:

[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()」命令執行存儲的更新 過程與param ETER:

@sessionid binary(32) 

,結果是錯誤:

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

我曾嘗試:

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

任何想法?謝謝。

回答

0

SqlDbType.Binary不正確(當您添加參數時) - 這是針對任意長度的擴展二進制數據。您只想將其表示爲64位整數,即SqlDbType.BigInt

順便說一句,你爲什麼要這樣做呢? SQL具有日期時間類型;你可以像這樣存儲它。

(你可以去了解它相反的,不正當的方式,而不是轉換長到八字節數組,並傳遞,但有你想將其存儲在這種方式沒有任何可以想到的原因。)

+0

好的,謝謝。我試過sqlCommand.Parameters.Add(「sessionid」,SqlDbType.BigInt,sizeof(Int64))。Value = settingsPropertyValue.PropertyValue;並且得到「值對於無符號字節來說太大或太小」。這看起來不錯嗎? – 2010-01-18 22:54:21

+0

SQL Server中它的數據類型是什麼? – SLaks 2010-01-18 23:04:56

+0

sessionid |二進制(32)| null – 2010-01-18 23:07:42

0

ToBinary不符合你的想法。

DateTime.ToBinary方法返回一個long值,而不是一個字節數組。

你想做什麼?

如果您嘗試存儲日期時間,則應該只使用DataTime列。

如果您確實需要一個字節數組,請提供更多詳細信息。

+0

謝謝。我確實希望ToBinary給我長期的價值。我正在創建一個會話ID,基本上使用long sessionId = DateTime.Now.ToBinary。然後,我將它存儲在數據庫中,並根據需要檢索它並將其轉換回DateTime。不過,我想我正在混淆如何存儲它。 – 2010-01-18 23:05:08

相關問題