5

如果这个问题已经被问及并回答,请原谅我。我只是花了一些时间搜索我的问题,但我似乎找不到它。

无论如何,我正在使用 Visual Studio 2010 和 MS SQL Server。我已经制作了数据库,现在我正在处理前端的东西。无论如何,通过我的搜索,我已经看到 nchar 不是 C# 数据类型,这很好,但它似乎不会为我将它转换为字符串。

Convert.ToString(reader["SerialNum"].ToString().Trim());

这就是给我一个错误的部分。它的意思是“不能将'string'隐式转换为'int'。”

有人知道解决整个 nchar 问题的方法吗?

提前致谢!

艾莉

[编辑]:所以这是整个方法......虽然我认为这里的其他任何东西都不会真正有帮助。

private Row PopulateRow(SqlDataReader pReader)
    {
        Row CurrentRow = new Row();
        CurrentRow.sTransNum = Convert.ToInt32(reader["STransNum"].ToString().Trim());
        CurrentRow.serialNum = Convert.ToString(reader["SerialNum"].ToString().Trim());
        CurrentRow.itemTypeID = Convert.ToInt32(reader["ItemTypeID"].ToString().Trim());
        CurrentRow.fromLocation = Convert.ToInt32(reader["FromLocation"].ToString().Trim());
        CurrentRow.toLocation = Convert.ToInt32(reader["toLocation"].ToString().Trim());
        CurrentRow.units = Convert.ToInt32(reader["Units"].ToString().Trim());
        CurrentRow.serialMoveDate = Convert.ToDateTime(reader["SerialMoveDate"].ToString().Trim());
        CurrentRow.moveTypeID = Convert.ToInt32(reader["MoveTypeID"].ToString().Trim());
        CurrentKey.sTransNum = CurrentRow.sTransNum;
        CurrentRow.CompleteState = "OK";
        return CurrentRow;
    }
4

7 回答 7

3

可能应该使用reader.GetString(ordinal)

reader.GetString(reader.GetOrdinal("SerialNum"))

如果结果中的值可以为 null,请使用 reader.IsDbNull(ordinal)

int ordinal = reader.GetOrdinal("SerialNum");
serial = reader.IsDbNull(ordinal) ? null : reader.GetString(ordinal);
于 2012-04-20T14:36:49.190 回答
1

您正在尝试将收到的值分配给 int。检查要为其分配值的变量/属性的定义。

于 2012-04-20T15:22:44.527 回答
0
Convert.ToString(reader["SerialNum"])

但您可能正在分配一个 int 变量。请提供更多代码。

于 2012-04-20T14:39:18.987 回答
0

这里有一些问题。

  1. 你投了两次。没有必要。
  2. C# 不是弱类型语言,因此您必须将转换结果放入另一个字符串。

因此,请尝试以下任一方法

string strTmp = Convert.ToString(reader["SerialNum"]);
strTmp = strTmp.Trim();

或者

string strTmp = reader["SerialNum"].ToString().Trim();

我希望这有帮助。

于 2012-04-20T14:41:36.853 回答
0

这是给你一个错误的完整代码行吗?该错误表明您正在尝试转换为 int。

于 2012-04-20T14:41:50.863 回答
0

整行是 CurrentRow.serialNum = Convert.ToString(reader....);

我打赌CurrentRow.serialNum是一个整数。

如果这是正确的,根据阅读器中数据的类型,其中之一将是您的解决方案:

CurrentRow.serialNum = Convert.ToInt32(reader["SerialNum"].ToString().Trim()); 
CurrentRow.serialNum = (int)reader["SerialNum"]; 
于 2012-04-20T14:48:54.120 回答
0

这可能不是数据类型问题,而是 NULL 问题。验证 serialNum 是否可以为 NULL。如果是这样,您可能需要使用 GetSqlString 或其他可以处理 NULL 情况的代码。

于 2012-04-22T01:36:46.933 回答