-2

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

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

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

VMResult.status 是一个字符

返回的数据是sql中的char(1)

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

你怎么看?

4

3 回答 3

2

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

这是正确的。sql server中的char是固定长度的字符串。它可以为空。

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

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

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

于 2012-06-15T17:53:32.323 回答
0

Reader["status"]如果你知道一个永远是 char的事实(或者你只想要第一个 char),并且当前的类型Reader["status"]是 astring你总是可以

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

编辑:空检查ftw。

于 2012-06-15T17:31:49.197 回答
0

好的,所以您基本上想将字符串转换为字符,这将假设您的“状态”值是单个字符串:

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

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

于 2012-06-15T17:32:03.590 回答