0

我正在尝试遍历数据集的行和列,以搜索数据集的name列与ColumnName对象之间的匹配DataReader

我有一个名为RECORDS在程序启动时为空的新表。我还有一个预先填充的表,它使用表ColumnPositions中的列名子集进行调用RECORDS。此例程旨在显示所有可用列的子集——作为默认显示样式。

我的代码有效...除了获取dr["type"]值的代码行。我得到错误:

colType当前上下文中不存在名称“ ”。

如您所见,我的字符串变量是在 WHILE 和 FOREACH 循环之外声明的。line 语句colName =工作得很好。但colType每次都失败。如果我在 VS2010 的中间窗口中做一个语句检查,? dr["type"]"我会得到结果integer。但是当我检查时? colType,我收到上述错误消息。

DataRow 对象的智能感知dr显示了一个包含 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 回答