0

nameデータセットの列とオブジェクトColumnNameからの一致を検索するために、データセットの行と列をループしようとしていDataReaderます。

RECORDSプログラムの起動時に空であるという新しいテーブルがあります。ColumnPositionsまた、テーブルで見つかった列名のサブセットで呼び出される、事前設定されたRECORDSテーブルもあります。このルーチンは、使用可能なすべての列のサブセットをデフォルトの表示スタイルとして表示することを目的としています。

私のコードは機能します...値を取得するコード行を除いてdr["type"]。エラーが発生します:

名前 ' colType' は現在のコンテキストに存在しません。

ご覧のとおり、文字列変数は WHILE ループと FOREACH ループの外で宣言されています。行ステートメントcolName =は問題なく機能します。しかし、colType毎回失敗します。VS2010 の中間ウィンドウでステートメント チェックを行うと? dr["type"]"、結果が得られintegerます。しかし、 を確認する? colTypeと、上記のエラー メッセージが表示されます。

DataRow オブジェクトの Intellisensedrは、6 つの項目の配列を明らかにします。配列のインデックス 1 は にマップされnameます。インデックス 2 は にマップされtypeます。? dr[2]中間ウィンドウでの値を確認すると、同じ結果が返ってきintegerます。正解です。しかし、この値が に割り当てられるたびにcolType、VS2010 は不平を言います。

私は C# の初心者ではないので、ここに投稿する前に多くのテストとグーグル検索を行いました。これは、私が木を通して森を見ていなかったことが原因であることを願っています。

これが私のコードです:

// get table information for RECORDS
SQLiteCommand tableInfo = new SQLiteCommand("PRAGMA table_info(Records)", m_cnCaseFile);
SQLiteDataAdapter adapter = new SQLiteDataAdapter(tableInfo);
DataSet ds = new DataSet();
adapter.Fill(ds);
DataTable dt = ds.Tables[0];

SQLiteCommand cmd = new SQLiteCommand("SELECT * FROM ColumnPositions WHERE ColumnStyle_ID = " + styleID + " ORDER BY ColumnPosition_ID ASC", m_cnCaseFile);
SQLiteDataReader colReader = cmd.ExecuteReader();

string colName = "";
string colType = "";

if (dt != null && colReader.HasRows)
{
    while (colReader.Read())
    {
        foreach(DataRow dr in dt.Rows)
        {
            colType = Convert.ToString(dr["type"]);
            colName = dr["name"].ToString();

            if (colReader["ColumnName"].ToString() == colName)
            {                                        
                DataGridViewColumn dgvCol = new DataGridViewColumn();
            }

        }
    }
}

dt.Dispose();
colReader.Close();
4

2 に答える 2

1

「dr["name"].ToString();」を使用する代わりに、「Convert.ToString(dr["name"]);」を使用することをお勧めします。

于 2013-03-26T02:44:00.557 に答える
0

列名の代わりに配列の位置を使用してみてください。

colType = Convert.ToString(dr[1]);

colName = dr[0].ToString();

おそらくこれは必要ありませんが、ここに SQLite PRAGMA table_info() コマンドによって返される値のドキュメントがあります。リンク

于 2013-03-26T04:14:31.597 に答える