我正在尝试按如下方式转换字符:
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术语必须有所不同。
您怎么看?
答案 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
)并且该值不为空。