名称'在当前上下文中不存在
本文关键字:上下文 不存在 名称 | 更新日期: 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()命令返回值的文档。链接