名称'在当前上下文中不存在

本文关键字:上下文 不存在 名称 | 更新日期: 2023-09-27 18:05:44

我正在尝试通过数据集的行和列来搜索数据集的name列与DataReader对象的ColumnName之间的匹配。

我有一个名为RECORDS的新表,它在程序启动时为空。我还有一个名为ColumnPositions的预填充表,其中包含RECORDS表中列名称的子集。这个例程的目的是显示所有可用列的一个子集——作为默认的显示样式。

My code works…除了获取dr["type"]值的那行代码。我得到错误:

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

可以清楚地看到,我的字符串变量是在WHILE和FOREACH循环之外声明的。行语句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();

名称'在当前上下文中不存在

与其使用"dr["name"].ToString();",不如使用"Convert.ToString(dr["name"]);"

尝试使用数组位置代替列名:

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

colName = dr[0].ToString();

您可能不需要这个,但是这里是SQLite PRAGMA table_info()命令返回值的文档。链接