如何从C#调用ms-access函数?

时间:2013-09-27 06:18:51

标签: function module ms-access-2007

我在名为'StripLead'的模块中编写了一个ms-access函数。我做了一个名为'CallFunction'的单行程序。现在,当我从ms-access调用此过程时,它可以正常工作。但是,当我从C#调用此过程时,我收到错误:

  

表达式中未定义的函数'Striplead'。

Ms-access模块​​代码:

Public Function StripLead(pstrPhrase As String) As String
  Dim strFirstWord As String
  Dim strReturn As String
  Dim intPos As Integer

  strReturn = pstrPhrase
  intPos = InStr(pstrPhrase, " ")
  If intPos > 0 Then
    strFirstWord = Left$(pstrPhrase, intPos - 1)
    Select Case strFirstWord
      Case "A", "An", "The"
      strReturn = Right$(pstrPhrase, Len(pstrPhrase) - intPos)
    End Select
  End If

StripLead = strReturn
End Function

Ms-access procedure“CallFunction”(sql view):

SELECT Customers.ID, Striplead([ContactName]) AS a FROM Customers;

C#代码:

   public void CallStoredProcedure(string NewQry)
       {
           try
           {
            DataTable tbl = new DataTable();
            using (OleDbConnection connection = new OleDbConnection(ConnectionString))
            {
                OleDbCommand cmd = new OleDbCommand();
                cmd.CommandText = "CallFunction";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = connection;

                using (OleDbDataAdapter adp = new OleDbDataAdapter(cmd))
                {
                    adp.Fill(tbl);
                }
            }

         }
        catch(Exception ex)
        {
            throw;   
        }
    }

请说明方法是否不正确。否则,如果有办法从C#调用ms-access函数来获取数据。 我的目标是从ms-access中获取修改后的数据并在C#中填充数据网格。

1 个答案:

答案 0 :(得分:3)

Access提供了从SQL查询调用用户定义的VBA函数的功能,但该功能仅限于从Microsoft Access应用程序本身中的进行的查询。这是因为VBA函数需要执行Access应用程序的基础结构(特别是VBA“表达式服务”)。

在您的情况下,您可以使用Microsoft.Office.Interop.Access在C#代码中运行“真正的”访问查询,但这会产生DAO Recordset个对象,并且摆弄它与OleDbDataAdapter合作可能比它的价值更麻烦(如果可能的话)。

你最好在C#中重新创建VBA函数逻辑。