C# 指定的强制转换无效-正在尝试强制转换字符
我正在尝试按如下方式转换字符:C# 指定的强制转换无效-正在尝试强制转换字符,c#,sql,C#,Sql,我正在尝试按如下方式转换字符: while (Reader.Read()) { VM VMResult = new VM(); VMResult.status = (char)Reader["status"]; VMList.Add(VMResult); } 然后是有趣的部分:指定的强制转换无效。 VMResult.status是一个字符 返回的数据是sql中的字符(1) 我认为C#/SQL字符的术语一定有所不同 你怎么想?如果你知道阅读器[“状态”]总是一个字符(或者你只想要第一
while (Reader.Read())
{
VM VMResult = new VM();
VMResult.status = (char)Reader["status"];
VMList.Add(VMResult);
}
然后是有趣的部分:指定的强制转换无效。
VMResult.status是一个字符
返回的数据是sql中的字符(1)
我认为C#/SQL字符的术语一定有所不同
你怎么想?如果你知道
阅读器[“状态”]
总是一个字符(或者你只想要第一个字符),而当前类型的阅读器[“状态”]
是一个字符串,你可以一直
VMResult.status = (!string.IsNullOrEmpty(Reader["status"])) ?
Reader["status"].ToCharArray()[0] : '';
编辑:空值检查ftw。好的,因此您基本上想要将字符串转换为字符,这将假设您的“状态”值是单个字符串:
VMResult.status = Reader["status"].ToString()[0];
这还假定读取器[]尚未返回字符串(如果返回,则不需要ToString
),并且该值不为null
我认为C#/SQL字符的术语一定有所不同
没错。sql server中的字符是固定长度的字符串。它可以为空
net中的字符是将单个字符表示为UTF-16代码单元的结构。它不能为null,因为它是一个结构
不存在固定长度的字符串.NET,除非考虑字符数组或字节数组为固定长度字符串。
由于与字符、字符数组或字节数组相比,大多数.net生态系统对字符串的支持更好,因此您最好只使用为字符(x)字段返回的字符串 char(10)
是一个字符串
。调试代码并检查读取器[“status”]
的类型。尝试将其转换为字符串,然后查看它是否有效。另外+1用于检查读卡器[“status”]
在debugger中键入如果我将VMResult.status更改为type string,则会起作用。我已经这么做了,只是想看看这是否可行,为什么不可行。