Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按顺序访问查询字段_C#_.net 3.5_Ms Access 2007 - Fatal编程技术网

C# 按顺序访问查询字段

C# 按顺序访问查询字段,c#,.net-3.5,ms-access-2007,C#,.net 3.5,Ms Access 2007,我的Access查询返回的字段顺序不正确。我的理解是,对于查询结果中的每一行,字段的顺序与查询的SELECT语句中指定的顺序相同。我做错了什么 String query = "SELECT " + "bas.[BAS BACnet Object Type/Instance], " + "bas.[BAS BACnet Object Name], " + "bas

我的Access查询返回的字段顺序不正确。我的理解是,对于查询结果中的每一行,字段的顺序与查询的SELECT语句中指定的顺序相同。我做错了什么

        String query =
            "SELECT " +
                "bas.[BAS BACnet Object Type/Instance], " +
                "bas.[BAS BACnet Object Name], " +
                "bas.[BAS Point List Description], " +
                "ore.[ORE Data Direction], " +
                "ref.[ENUM_H], " +
                "yk.[CCC Max Value (eng units)], " +
                "yk.[CCC Min Value (eng units)], " +
                "yk.[CCC Enum/Data Set], " +
                "ore.[ORE COV Increment], " +
                "ore.[ORE Display Precision] " +
            "FROM (([OV2 BAS] AS bas " +
            "INNER JOIN [OV2 ORE] AS ore ON bas.[Ref ID] = ore.[Ref ID]) " +
            "INNER JOIN [OV2 RefID] AS ref ON bas.[Ref ID] = ref.[Ref ID]) " +
            "INNER JOIN [YK CAPP] AS yk ON bas.[Ref ID] = yk.[Ref ID] " +
            "WHERE bas.[BAS BACnet Object Type/Instance] <> '';";

        try
        {
            cmd = new OleDbCommand(query, this._conn);
            reader = cmd.ExecuteReader();

            if (reader.HasRows == false)
            {
                Exception e = new Exception("Read of mapping table returned no results.");
                throw e;
            }

            while (reader.Read() != false)
            {
                Int32 columns;
                Object[] fields = new Object[10];

                columns = reader.GetValues(fields);

                avClass = new AVClass();

                for (int i = 0; i < AVClass.AV_CLASS_PROPERTIES; i++)
                {
                    avClass.Properties[i] = new AVProperty((AVProperty.PROPERTY_ID)i, fields[i]);
                    results.Add(avClass);
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("ERROR: " + e.Message);
            Console.WriteLine(e.ToString());
        }

目前还不清楚这是否是唯一的问题,但我认为这是错误的:

for (int i = 0; i < AVClass.AV_CLASS_PROPERTIES; i++)
{
    avClass.Properties[i] = new AVProperty((AVProperty.PROPERTY_ID)i, fields[i]);
    results.Add(avClass);
}
您正在为每个字段的结果列表添加相同的引用类。我怀疑你想把Add调用放在循环之后

另外,您还没有显示什么是AVProperty.PROPERTY_ID,但是您需要确保查询的SELECT部分与之匹配。大概是一个枚举。。。因此,需要对应于bas的枚举值。[bas BACnet对象类型/实例]的值为0,以此类推

如果您能提供更多的相关代码,我们可能会为您提供更多帮助。我还强烈建议您仔细阅读您的代码,使您的名字更易于解释和习惯用语。NET不使用首字母大写作为名称

此外:

您没有对任何应该处理的对象使用语句 您正在忽略从GetValues返回的值。
如上所述,它们是按选定顺序排列的

您正在根据avClass.Properties的顺序在中读取它们。。。。 要使其工作,avXClass.Properties[3]必须位于您想要的位置[点列表说明]

这不是一个好主意,这会改变两端的顺序,如果你幸运的话,你的代码会立即失效。 某种映射可能会做到这一点,或者只是


AVClass.SetProperty[SomeKnownPropertyName]=reader.Fields[SomeKnownPieldName]

不是在“发件人”中,而是在查询的“选择”部分。是的,它们一定是按顺序排列的,没有例外。@Svarog:接得好!我修正了打字错误