如何将int转换为字节数组?

时间:2011-04-21 16:42:30

标签: c# asp.net sql-server stored-procedures

我有一个表,其中有一列名为:

  

'eZip'(varbinary(5),null)。

现在我正在从这样的网络表单中添加价值:

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

它正在工作,但它没有放入有效的邮政编码,而是将其插入我的专栏:

<Binary data>

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

我认为你本身并没有做错任何事。如果将字段定义为varbinary,则无论数据如何,您都将在SQL Server的管理工具中看到“二进制数据”。

您确定不想仅使用CHAR(n)VARCHAR(n)作为邮政编码吗?

答案 1 :(得分: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;

从C#中的DataRow dr中检索值:

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

如果您可以将列更改为CHAR(5)或VARCHAR(5),则无需转换。