指定的Cast无效 - 尝试转换char

时间:2012-06-15 17:27:27

标签: c# sql

我正在尝试按如下方式转换字符:

while (Reader.Read())
{
  VM VMResult = new VM();
  VMResult.status = (char)Reader["status"];
  VMList.Add(VMResult);
}

然后是有趣的部分:Specified Cast is not Valid.

VMResult.status是一个char

返回的数据是sql

中的char(1)

我认为C#/ SQL char术语必须有所不同。

您怎么看?

3 个答案:

答案 0 :(得分:2)

  

我认为C#/ SQL char术语必须有所不同。

这是对的。 SQL Server中的char是固定长度的字符串。它可以是可空的。

.net中的char是一种将单个字符表示为UTF-16代码单元的结构。它不能为null,因为它是一个结构

除非您将char数组或字节数组视为固定长度字符串,否则没有固定长度的字符串.Net。

由于大多数.net生态系统比字符,字符数组或字节数组更好地支持字符串,因此只使用为char(x)字段返回的字符串会更好。

答案 1 :(得分:0)

如果您知道Reader["status"]将永远是一个字母(或者您只想要第一个字符),并且当前类型的Reader["status"]string,您可以随时

VMResult.status = (!string.IsNullOrEmpty(Reader["status"])) ? 
                      Reader["status"].ToCharArray()[0] : '';

编辑: null检查ftw。

答案 2 :(得分:0)

好的,所以你基本上想要将字符串转换为char,这将假设你的“status”值是一个单字符串:

VMResult.status = Reader["status"].ToString()[0];

这也假设Reader []尚未返回字符串(如果确实没有,则不需要ToString)并且该值不为空。