【问题标题】:How to convert int into Byte Array?如何将 int 转换为字节数组?
【发布时间】:2011-04-21 16:42:30
【问题描述】:

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

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

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

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

它可以工作,但不是输入有效的邮政编码,而是将其插入我的专栏:

<Binary data>

我在这里做错了什么?

【问题讨论】:

  • 是什么让你说它正在将它插入你的列?
  • 如果您将邮政编码存储在数据库中,请将列设为charvarchar。首先将邮政编码转换为int 是一个坏主意,然后将int 转换为二进制是另一个坏主意。
  • @Adam:我查过了。我的 SP 在 MSSQL 2008 中。
  • @Musi: 那么 MSSQL 2008 中 Zip 的最佳数据类型应该是什么?
  • @Mayank:any RDBMS 中邮政编码的最佳类型是字符串类型,charvarchar。如果您只想处理美国邮政编码,char(5)(或char(10),如果您想处理连字符+4)将是最佳选择。

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


【解决方案1】:

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

您确定不希望只使用CHAR(n)VARCHAR(n) 作为邮政编码吗?

【讨论】:

  • 邮政编码不是整数,它们是字母数字数据,(在美国)仅由五个数字或九个数字和一个连字符组成。
  • 那么 MSSQL 2008 中 Zip 的最佳数据类型应该是什么?
  • @Adam 你是对的,我将编辑指定 Char 或 Varchar
  • @Mayank 美国最全面的邮政编码格式是“Zip + 4”格式,即 nnnnn-xxxx 格式。所以 VARCHAR(10) 可能就足够了,因为它可以保存 5 位或 9 位版本。
【解决方案2】:

如果您无法更改该列的数据类型,您只需在获取数据时转换该值即可。按照其他人的建议,您至少应该更改代码以假定五个字节是字符,而不是整数。

插入值:

 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),则无需转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-20
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多