2011-04-21 188 views
1

我有一個表,其中有一個指定的列:(VARBINARY(5),零)如何將int轉換爲Byte數組?

'eZip'。

現在,我從網絡的形式是這樣的增值:

cmd.Parameters.Add("@eZip", SqlDbType.VarBinary).Value = BitConverter.GetBytes(int.Parse(txtZip.Text.ToString())); 

它的工作,但不是把有效的郵政編碼,它被插入到這一點我的專欄:

<Binary data> 

我在這裏做錯了什麼?

+0

是什麼讓你說它將它插入到列中? – 2011-04-21 16:44:59

+1

如果您要將郵政編碼存儲在數據庫中,請創建'char'或'varchar'列。首先將郵政編碼轉換爲「int」是一個壞主意,然後將「int」轉換爲二進制是另一個壞主意。 – MusiGenesis 2011-04-21 16:50:29

+0

@亞當:我檢查了它。我的SP在MSSQL 2008中。 – 2011-04-21 16:59:57

回答

3

我不認爲你在做任何錯誤的事情。如果將該字段定義爲varbinary,則無論數據如何,您都將在SQL Server的管理工具中看到「二進制數據」。

您確定您不想只需要CHAR(n)VARCHAR(n)作爲郵政編碼?

+0

郵政編碼不是整數,它們是(在美國)只包含五位數字或九位數字和連字符的字母數字數據。 – 2011-04-21 16:54:47

+0

那麼在MSSQL 2008中,Zip應該是最好的數據類型? – 2011-04-21 16:59:39

+0

@Adam您是對的,我將編輯以指定Char或Varchar – 2011-04-21 18:05:26

1

如果您無法更改該列的數據類型,則只需在將數據返回時轉換該值。正如其他人所建議的,您至少應該更改您的代碼,以假定五個字節是字符,而不是整數。

插入值:

cmd.Parameters.Add("@eZip", SqlDbType.VarBinary).Value = System.Text.Encoding.ASCII.GetBytes(txtZip.Text.ToString()); 

檢索SSMS工具的價值:

SELECT CONVERT(VARCHAR(5), [eZip]) AS [eZip] FROM @zip_table; 

檢索從DataRow dr值在C#:

System.Text.Encoding.ASCII.GetString(dr["eZip"]); 

如果你可以改變列轉換爲CHAR(5)或VARCHAR(5),則不需要轉換。