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,则会起作用。我已经这么做了,只是想看看这是否可行,为什么不可行。