我正在尝试遍历数据集的行和列,以搜索数据集的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();