【问题标题】:GET byte array from SQL Server parameter in C#从 C# 中的 SQL Server 参数获取字节数组
【发布时间】:2018-06-01 14:56:46
【问题描述】:

我正在尝试从我的 SQL Server 参数中获取一个字节数组。我像这样从 SQL Server 获取数据:

cmd.Parameters.Add("@Image1", SqlDbType.VarBinary).Size = 5000000;
cmd.Parameters["@Image1"].Direction = ParameterDirection.Output;

conn.Open();
cmd.ExecuteNonQuery();

string str = cmd.Parameters["@Image1"].Value.ToString();

我在字符串中得到值System.Byte[],但是我需要整个字节数组,我可以将它存储为图像。

我将如何使用.Value 返回一个对象我会将该对象转换为字节数组吗?

【问题讨论】:

  • 你试过这个吗:string str = cmd.Parameters["@Image1"].Value as byte[];
  • 当您调用ToString 方法时您得到System.Byte[] 的事实告诉您该值已经是您期望的类型。您需要做的就是将类型转换的值分配给一个变量。
  • 哦,好吧,这更有意义并不知道您可以轻松转换它。试试看

标签: c# arrays sql-server byte varbinary


【解决方案1】:

你可能想多了:

byte[] imageArray = (byte[])cmd.Parameters["@Image1"].Value;

编辑:铸造右手边。谢谢胡安。

【讨论】:

  • @JuanR 你能解释一下为什么吗?我们已经被告知cmd.Parameters["@Image1"].ValueSystem.Byte[] 类型。这是我自己学习的。
  • 这是因为编译时的类型检查。编译器会告诉你它不能隐式转换类型。 Value 属性的类型为 object。您将其分配给byte[] 类型的变量。编译器无法知道该对象实际上是该类型,因此它会强制您执行强制转换以保持一致性。
  • 我明白了,感谢您的解释。我已经在我的回答中投给了byte[]
  • +1 来自我。实际上,与as byte[] 相比,我更喜欢这种方法,因为如果它不能强制转换,则结果是null 对象,这在运行时可能会产生误导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多