C# C和VBA记录集之间的DAO差异

C# C和VBA记录集之间的DAO差异,c#,vba,dao,recordset,C#,Vba,Dao,Recordset,在VBA中,我可能有如下内容: Dim recordSet As DAO.recordSet result = recordSet("Column Name") 然而,我试图用C语言做同样的事情 result = recordSet("Column Name"); 不起作用,因为C使用方括号表示集合。 但这似乎也不起作用: result = recordSet["Column Name"]; 关于上述VBA代码的C等价物有什么想法吗 编辑:这是我试图转换

在VBA中,我可能有如下内容:

    Dim recordSet As DAO.recordSet  
    result = recordSet("Column Name")
然而,我试图用C语言做同样的事情

    result = recordSet("Column Name");
不起作用,因为C使用方括号表示集合。 但这似乎也不起作用:

    result = recordSet["Column Name"];
关于上述VBA代码的C等价物有什么想法吗

编辑:这是我试图转换的完整VBA代码,并将其放到上下文中

Public Function GetColumnValues( _
                                 database As database, _
                                 column As String, _
                                 table As String _
                               ) As String()

Dim sqlQuery As String
Dim recordSet As DAO.recordSet
Dim recordCount As Integer
Dim results() As String

sqlQuery = "SELECT [" + table + "].[" + column + "]" & _
           "FROM [" + table + "];"


Set recordSet = database.OpenRecordset(sqlQuery)
recordSet.MoveLast             
recordSet.MoveFirst
recordCount = recordSet.recordCount

ReDim results(recordCount) As String

For i = 1 To recordCount
    results(i) = recordSet(column)
    recordSet.MoveNext
Next i

recordSet.Close

GetColumnValues = results

End Function

您想要的是数据集还是数据表

编辑: 尝试一些尚未测试的类似操作,需要进行一些错误处理:

    public string[] GetColumnValues(string connectionString, string table, string column)
    {
        var connection = new SqlConnection(connectionString);
        var dataAdapter = new SqlDataAdapter(
            string.Format("SELECT [{0}].[{1}] FROM [{0}]", table, column), connection);
        var result = new List<string>();

        connection.Open();

        var dataSet = new DataSet();
        dataAdapter.Fill(dataSet);

        if (dataSet.Tables.Count > 0)
        {
            result.AddRange(from DataRow row in dataSet.Tables[0].Rows select row[0].ToString());
        }

        connection.Close();

        return result.ToArray();
    }

您想要的是数据集还是数据表

编辑: 尝试一些尚未测试的类似操作,需要进行一些错误处理:

    public string[] GetColumnValues(string connectionString, string table, string column)
    {
        var connection = new SqlConnection(connectionString);
        var dataAdapter = new SqlDataAdapter(
            string.Format("SELECT [{0}].[{1}] FROM [{0}]", table, column), connection);
        var result = new List<string>();

        connection.Open();

        var dataSet = new DataSet();
        dataAdapter.Fill(dataSet);

        if (dataSet.Tables.Count > 0)
        {
            result.AddRange(from DataRow row in dataSet.Tables[0].Rows select row[0].ToString());
        }

        connection.Close();

        return result.ToArray();
    }

请参阅我的编辑,我添加了VBA函数,我正试图将其转换为C,以帮助将其放入上下文中您的C代码中有哪些导入参数。你期望/需要什么样的返回类型?我不确定你对导入参数的要求。我只是想创建一个与我上面发布的代码完全相同的C代码。results变量需要一个字符串。我很欣赏代码片段,但我必须使用DAO框架。我正在寻找从VBA到C的等效DAO代码。除了我最初要求的记录集行之外,我已经这样做了。请参阅我的编辑,我添加了VBA函数,我试图将其转换为C以帮助将其放入上下文中。在C代码中有哪些导入参数。你期望/需要什么样的返回类型?我不确定你对导入参数的要求。我只是想创建一个与我上面发布的代码完全相同的C代码。results变量需要一个字符串。我很欣赏代码片段,但我必须使用DAO框架。我正在寻找从VBA到C的等效DAO代码。除了我最初要求的记录集行之外,我已经这样做了。如果您发布您尝试过的C代码以及任何错误消息,您更有可能收到帮助。我不确定,但请尝试recordSet.Fields[Column Name]@谢谢!它最终成为记录集;请作为答案发布,我将接受。在VBA中,+不是有效的连接运算符。您应该使用&instead如果您发布了您尝试的C代码以及任何错误消息,您更有可能收到帮助。我不确定,但请尝试recordSet.Fields[Column Name]@谢谢!它最终成为记录集;请作为答案发布,我将接受。在VBA中,+不是有效的连接运算符。你应该用&来代替