5

この質問がすでに尋ねられ、答えられているならば、私を許してください。質問を探すのに少し時間を費やしたところ、見つからないようです。

とにかく、私はVisualStudio2010とMSSQLServerで作業しています。私はデータベースを作成しました、そして私は今フロントエンドのものに取り組んでいます。とにかく、私の検索を通して、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

完全な行は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

ここでいくつか問題があります。

  1. あなたは2回キャストしています。必要はありません。
  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
Convert.ToString(reader["SerialNum"])

しかし、おそらく int 変数に割り当てています。もっとコードをください。

于 2012-04-20T14:39:18.987 に答える
0

これはデータ型の問題ではなく、NULL の問題である可能性があります。serialNum を NULL にできるかどうかを確認します。その場合は、NULL ケースを処理できる GetSqlString またはその他のコードを使用する必要がある場合があります。

于 2012-04-22T01:36:46.933 に答える