C# 名称';colType';在当前上下文中不存在

C# 名称';colType';在当前上下文中不存在,c#,.net,string,datareader,C#,.net,String,Datareader,我试图在数据集的行和列之间循环,以搜索数据集的名称列与数据读取器对象中的列名称之间的匹配 我有一个名为RECORDS的新表,它在程序启动时是空的。我还有一个名为ColumnPositions的预填充表,其中包含RECORDS表中的列名子集。此例程用于显示所有可用列的子集,作为默认显示样式 我的代码有效…除了获取dr[“type”]值的代码行。我得到一个错误: 当前上下文中不存在名称“colType” 您可以清楚地看到,我的字符串变量是在WHILE和FOREACH循环之外声明的。line语句col

我试图在数据集的行和列之间循环,以搜索数据集的
名称
列与
数据读取器
对象中的
列名称
之间的匹配

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

我的代码有效…除了获取
dr[“type”]
值的代码行。我得到一个错误:

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

您可以清楚地看到,我的字符串变量是在WHILE和FOREACH循环之外声明的。line语句
colName=
工作正常。但是
colType
每次都失败。如果我在VS2010的中间窗口中为
执行语句检查?dr[“type”]“
我得到结果
integer
。但是当我选中
?colType
时,我得到上面提到的错误消息

DataRow对象
dr
的intellisense显示一个包含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()返回的值的文档命令。

我还应该简要描述例程的用途。我有一个名为RECORDS的新表,在程序启动时为空。我还有一个名为ColumnPositions的预填充表,其中包含在RECORDS表中找到的列名子集。此例程旨在显示所有可用列的子集,作为默认的diPlay样式。实际编码将插入定义新DataGridViewColumn()的代码行中.但现在,此函数非常有效地说明了任务。这是一个运行时错误?不是编译器错误?是的。这是一个运行时错误。这很奇怪。您是否有任何其他功能,如数据库列名,称为
colType
?您是否正在执行任何动态生成代码的操作?所有这些代码都在同一个程序集中吗?如果这个答案有帮助,请投票。这是给回答的动机:)。感谢关于字符串转换的提示。我倾向于使用Convert.ToString()选项,但想说明两者都实现了。ToString()适用于colName。ToString()和Convert.ToString()for colType失败。我尝试了此操作,但相同的错误仅出现在“colType”中。在此期间,我将查看您的链接,谢谢。确实非常奇怪。请尝试将
colType
设置为匿名变量(
var
)而不是
字符串
。可能
PRAGMA
语句将该列作为
字符串
以外的内容返回。