【问题标题】:DAO difference between C# and VBA RecordSetsC# 和 VBA RecordSets 之间的 DAO 区别
【发布时间】:2013-09-04 09:20:21
【问题描述】:

在 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

【问题讨论】:

  • 如果您发布您尝试过的 C# 代码以及任何错误消息,您更有可能获得帮助。
  • 我不确定,但请尝试recordSet.Fields["Column Name"];
  • @DmitryDovgopoly 谢谢!它最终成为 recordSet.Fields["Column Name"].Value;请张贴作为答案,我会接受。
  • + 在 VBA 中不是有效的串联运算符。你应该改用&

标签: c# vba dao recordset


【解决方案1】:
result = recordSet.Fields["Column Name"].Value;

【讨论】:

    【解决方案2】:

    DataSet 或 DataTable 可能是您正在寻找的吗?

    编辑: 尝试这样的事情(尚未测试,需要一些错误处理):

        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();
        }
    

    【讨论】:

    • 请查看我的编辑,我添加了我试图转换为 C# 的 VBA 函数以帮助将其放入上下文中
    • 您的 C# 代码中有哪些导入参数。您期望/需要什么返回类型?
    • 我不确定您对导入参数的要求。我只是想创建一个与我上面发布的确切代码等效的 C#。结果变量需要一个字符串。
    • 我很欣赏代码sn-p,但我必须使用DAO框架。我正在寻找从 VBA 到 C# 的等效 DAO 代码。除了我最初要求的 recordSet 行之外,我已经完成了。
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2020-10-17
    • 2010-10-23
    • 2018-10-23
    相关资源
    最近更新 更多