0

Excel シートからデータテーブルにデータをインポートしていますが、データ型に関する問題/質問があります。データテーブルを作成するときに、列とそのデータ型を追加します。この後、Excel からデータをインポートすると、正常に動作します。列のデータ型を確認すると、期待どおりの結果が得られます。ただし、関数に値を渡そうとすると、設定したデータ型ではなく、オブジェクト型を渡そうとしているというメッセージが表示されます。

これが私のコードです(単純化されたデータセットです):

public void importData(string _file)
    {
        DataTable dtTest = new DataTable();
        dtTest.Columns.Add("a", typeof(Int32));
        dtTest.Columns.Add("b", typeof(Int32));

        string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data       Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", _file);
        OleDbConnection conn = new OleDbConnection(connString);

        conn.Open();

        OleDbDataAdapter objAdapter = new OleDbDataAdapter();

        string sheetName = "Sheet1";
        string sql = "SELECT * FROM [" + sheetName + "$]";

        OleDbCommand objCmdSelect = new OleDbCommand(sql, conn);
        objAdapter.SelectCommand = objCmdSelect;

        objAdapter.Fill(dtTest);
        conn.Close();

        form.write(dtTest.Rows[0]["a"]);
    }

関数「form.write()」は整数を受け入れます。

値を form.write に渡す前にデータ型を確認すると、Int32 と表示されます。

if (dtTest.Columns[0].DataType == typeof(Int32))
        {
            //this is true
        }

私は何を間違っていますか?

4

2 に答える 2

0

関数「form.write()」は整数を受け入れます。

整数を受け入れるためform.Write、オブジェクトからint次のようにキャストする必要があります。

int a = dtTest.Rows[0].Field<int>("a");
form.write(a);

C# では遅延バインディングは許可されていません。コンパイル時に正しい型を使用する必要があります。

于 2013-06-06T21:29:36.813 に答える
0

あなたの投稿を正しく理解している場合は、値をキャストする必要があるかもしれません。

form.write(dtTest.Rows[0]["a"]);

私はそれがそうであるべきだと信じています:

form.write(Convert.ToInt32(dtTest.Rows[0]["a"]));

Convert.ToInt32() がなければ、オブジェクト型を参照しています。

于 2016-02-16T16:58:10.703 に答える