Вы можете обращаться к базам данным и таблицам Visual FoxPro в Visual Studio с помощью Visual FoxPro OLE DB Provider. Visual FoxPro OLE DB Provider доступен через Visual Studio Server Explorer или через использование строки соединения в программном коде.

Доступ к источникам данных Visual FoxPro Data Sources через Visual Studio Server Explorer

Вы можете обращаться к базам данным и таблицам Visual FoxPro в Visual Studio введением их в списое соединений с данными, который появляется в панели Visual Studio Server Explorer. Для начала вам необходимо указать соединение через Visual FoxPro OLE DB Provider к желаемым базам данных и таблицам. Затем вы можете выбрать базы данных или таблицы для того, чтобы они появились в панели Visual Studio Server Explorer pane.

NoteЗамечание

У вас есть возможность указать папку желаемой базы данных или таблицы Visual FoxPro предоставив путь и имя файла или просто найти ее на диске просмотром.

Для соединения к базе данных или таблице Visual FoxPro через Visual FoxPro OLE DB Provider

  1. Откройте Visual Studio.

  2. Из меню View выберите Server Explorer.

  3. В панели Server Explorer выполните щелчок по правой клавише мыши на Data Connections и затем щелкните на Add Connection.

  4. В диалоговом окне Data Link Properties щелкните на закладке Provider tab.

  5. Выберите Microsoft OLE DB Provider for Visual FoxPro.

    В диалоговом окне Data Link Properties появится закладка Connection.

Для ввода базы данных или таблицы Visual FoxPro

  1. На закладке Connection впечатайте в боксе Select or enter a database name путь и имя желаемой базы данных или таблицы.

    - или -

    Для поиска папки базы данных или таблицы Visual FoxPro щелкните по командной кнопке поиска (...) справа от бокса ввода пути и имени файла для того, чтобы открыть диалоговое окно Configure Connection.

  2. Укажите, если требуется, другую последовательность сопоставления (collating sequence).

  3. Для проверки соединения, щелкните по Test Connection. Если соединение удалост установить, щелкните поOK.

Выбранная папка базы данных или таблицы появится в Visual Studio Server Explorer под узлом Data Connections.

Доступ к источникам данных Visual FoxPro с помощью строк соединения

Для доступа к источникам данных Visual FoxPro в программном коде, используйте допустимую строку соединения для указания Visual FoxPro OLE DB Provider, источника данных или имени источника данных. Например, вы можете обращаться к Visual FoxPro OLE DB Provider используя программный код Visual FoxPro.

Кроме того, вы можете вместо источника данных указать существующих Visual FoxPro ODBC Data Source Name (DSN). Provider использует источник данных, указанный в DSN и расширяет его в подходящую для Provider строку соединения.

Для соединения с Visual FoxPro OLE DB Provider в Visual FoxPro

  1. Создайте объект ActiveX Data Object (ADO) Connection object aи создайте объект данных в Visual FoxPro.

  2. Укажите Visual FoxPro OLE DB Provider и источник данных в строке соединения так, как это показано в приведенном ниже программном коде:

     CopyCode imageСкопировать код
    oConn = CREATEOBJECT("ADODB.Connection")
    oConn.ConnectionString = "provider=vfpoledb.1;;
       data source=.\MyTestDatabase.dbc"
    oConn.Open

Этот код создает объет данных из которого вы можете извлекать данные.

NoteЗамечание

Убедитесь, что заменили MyTestDatbase своим, подходящим именем базы данных.

Вместо источника данных вы можете использовать в строке соединения существующий Open Database Connectivity (ODBC) data source name (DSN) для Visual FoxPro OLE DB Provider. Visual FoxPro OLE DB Provider принимает параметр, DSN = cDSNName, и использует источник данных, указанный в DSN так, как это показано в приведенном ниже примере:

 CopyCode imageСкопировать код
oConn=CREATEOBJECT("adodb.connection")
oConn.ConnectionString="Provider=vfpoledb;DSN=ODBCdataSourceName"
oConn.Open()
NoteЗамечание

Убедитесь, что заменили ODBCdataSourceName своим, подходящим ODBC DSN, например, vfpTestData.

После того, как соединение будет открыто, вы можете запрашивать значение ConnectionString для определения оцениваемого источника данных.

Строка соединения включает в себя приведенные ниже ключевые слова-атрибуты и значения:

Provider= cVFPOLEDBProvider

Указывает Visual FoxPro OLE DB Provider (VFPOLEDB).

Data Source= cPath

Указывает путь к базе данных Visual FoxPro или папкуЮ содержащую свободные таблицы. Например, c:\Microsoft Visual FoxPro\Samples\Data\Testdata.dbc

DSN= cDSNName

Указывает существующий ODBC DSN.

Mode= cMode

Указывает одно из списка: Read, ReadWrite, Share Deny None (по умолчанию), Share Deny Read, Share Deny Write или Share Exclusive, которое включает два предыдущих режима.

Для полного объяснения синтаксиса строки соединения обратитесь к Microsoft OLE DB 2.5 Programmer's Reference and SDK Guide.

Обновление данных Visual FoxPro

Вы можете обновлять данные Visual FoxPro новыми значениями через Visual FoxPro OLE DB Provider с помощью ADO. Приведенная ниже процедура описывает три метода, с помощью которых вы можете производить обновление данных Visual FoxPro используя данные из базы данных Northwind, размещенной в каталоге Visual FoxPro ..\Samples\Northwind.

NoteЗамечание

Убедитесь, что вы заменили имя NorthWind.dbc именем базы данных, которую вы желаете использовать.

Для обновления данных Visual FoxPro через Visual FoxPro OLE DB Provider с помощью ADO

  1. Вызовите команды обновления, вставки или удаления (update, insert или delete) непосредственно в коде.

    Для прямого вызова команды обновления используйте метод ADO Execute. Например:

     CopyCode imageСкопировать код
    CLEAR
    LOCAL oConn as "adodb.connection"
    LOCAL oRS as "adodb.recordset"
    oConn = CREATEOBJECT('adodb.connection')
    oRS = CREATEOBJECT('adodb.recordset')
    cConnStrng = ;
       "Provider=vfpoledb;Data Source="+HOME(2)+"Northwind\Northwind.dbc"
    oConn.Open(cConnStrng)
    oConn.BeginTrans()
    oConn.Execute("UPDATE Customers SET contactname = 'Patricio X. Simpson';
       WHERE customerid='CACTU'")
    oRS = oConn.Execute("SELECT * FROM customers WHERE customerid = 'CACTU'")
    ?oRS.Fields("contactname").Value
    oConn.RollbackTrans()
    oRS.Requery()
    ?oRS.Fields('contactname').Value
    oRS.Close()
    oConn.Close()

    - или -

  2. Используйте курсор на клиенте.

    Например:

     CopyCode imageСкопировать код
    CLEAR
    LOCAL oConn as "adodb.connection"
    LOCAL oRS as "adodb.recordset"
    oConn = CREATEOBJECT('adodb.connection')
    oRS = CREATEOBJECT('adodb.recordset')
    cConnStrng = ;
       "Provider=vfpoledb;Data Source="+HOME(2)+"Northwind\Northwind.dbc"
    oConn.CursorLocation= 3            && adUseClient
    oConn.Open(cConnStrng)
    
    *!* Open RecordSet using keyset cursor and optimistic locking.
    oRS.Open(;
       "SELECT * FROM customers WHERE customerid = 'CACTU'",oConn,1,3,1)
    ? 'Current value:',oRS.Fields("contactname").Value
    oRS.Fields("contactname").Value = "Patricio X. Simpson"
    oRS.Update()
    oRS.Requery()
    ? 'New value:',oRS.Fields("contactname").Value
    oRS.Close()
    oConn.Close()

    - или -

  3. Используйте курсор на сервере.

    Например:

     CopyCode imageСкопировать код
    LOCAL oRS as "adodb.recordset"
    oConn = CREATEOBJECT('adodb.connection')
    oRS = CREATEOBJECT('adodb.recordset')
    cConnStrng = ;
       "Provider=vfpoledb;Data Source="+HOME(2)+"Northwind\Northwind.dbc"
    oConn.Open(cConnStrng)
    
    *!* Updatable server cursors must use the USE <table name> command to 
    *!* open the table, not a SELECT statement. Server cursor is updatable,
    *!* opened keyset, and lock optimistic.
    oRS.Open("USE customers",oconn,1,3,1)
    ? 'CursorLocation:',IIF(oRS.CursorLocation=2,"adUseServer","adUseClient")
    
    * Find CACTU.
    ? oRS.Find("customerid='CACTU'")
    ? 'Current value:',oRS.Fields("contactname").Value
    oRS.Fields("contactname").Value = "Patricio Simpson"
    oRS.Update()
    oRS.Requery()
    oRS.Find("customerid='CACTU'")
    ? 'New value:',oRS.Fields("contactname").Value 
    oRs.Close()
    oRS =''
    oConn.Close()oConn=''

Доступ к данным Visual FoxPro Data из других языков

Вы можете обращаться к Visual FoxPro OLE DB Provider из других языков используя различные строки соединения, зависящие от языка. Например, для соединения с базой данных Visual FoxPro из приложения Visual C#, вы можете использовать приведенную ниже строку соединения, заменив имя myVFPDatabase подходящим именем источника данных:

 CopyCode imageСкопировать код
oleDbConnection1.ConnectionString = "Provider=VFPOLEDB.1;" + 
   "Data Source=C:\\myVFPDatabase.DBC;";

Приведенные ниже программный код иллюстрирует использование строк соединения, которые указывают Visual FoxPro OLE DB Provider и источник данных из других языков.

NoteЗамечание

Убедитесь, что заменили myVFPDatabase подходящим источником данных или DSN.

Для обращения к данным Visual FoxPro в Visual C#

  • Используйте строку соединения для указания Visual FoxPro OLE DB Provider и обращайтесь к источнику данных так, как показано в приведенном ниже программном коде:

     CopyCode imageСкопировать код
    OleDbConnection oleDbConnection1 = new OleDbConnection("Provider=VFPOLEDB.1;" + 
          "Data Source=C:\\myVFPDatabase.DBC;");
    oleDbConnection1.Open();

Для доступа к данным Visual FoxPro из Visual Basic

  • Используйте строку соединения для указания Visual FoxPro OLE DB Provider и источника данных так, как это показано в приведенном ниже коде, где oConnection представляет собой объект ADO Connection:

     CopyCode imageСкопировать код
    oConnection.Open("Provider=vfpoledb.1;
       Data Source=.\myVFPDatabase.dbc")

Для доступа к данным Visual FoxPro с помощью ActiveX Data Objects (ADO) в Visual Basic

  • Используйте строку соединения для указания Visual FoxPro OLE DB Provider и источника данных так, как это показано в приведенном ниже коде:

     CopyCode imageСкопировать код
    Imports System.Data.OleDb
    Public Class ConnectToVFP
        Public Function ADONETOpenVFPDatabase() As Boolean
            Dim bIsConnected As Boolean = True
            Try
                Dim cnn As New OleDbConnection("Provider=VFPOLEDB.1;" + _
                   "Data Source=.\MyTestDatabase.dbc;")
                cnn.Open()
            Catch e As System.Exception
                bIsConnected = False
            End Try
            Return bIsConnected
        End Function
    End Class
    NoteЗамечание

    Убедитесь, что заменили MyTestDatabase именем своей базы данных или каталога таблицы, доступ к которым вы желаете получить.

Для доступа к источнику данных Visual FoxPro из Visual C++

  • Установите свойства базы данных указанием массива DBSetProp, массива DBProp и указателя IDBProperties, следующими за строкой соединения, которая указывает Visual FoxPro OLE DB Provider так, как показано в приведенном ниже программном коде:

     CopyCode imageСкопировать код
    HRESULT hr;
    CLSID clsid;     
    
    // Set the DBProp array.
    DBPROP iProp[1];
    DBPROPSET rgIP;
    IDBProperties* pIDBProperties = NULL;
    IDBInitialize *pIDBInitialize = NULL;
    VariantInit(&iProp[0].vValue);
    iProp[0].dwOptions = DBPROPOPTIONS_OPTIONAL;    // Required
    iProp[0].colid = DB_NULLID;
    
    // Set the location of data source. 
    iProp[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
    iProp[0].vValue.vt = VT_BSTR;
    iProp[0].vValue.bstrVal = L"c:\myVFPDatabase.dbc"; // Data source
    
    // Set DBpropset to point to the DBPROP array.
    rgIP.guidPropertySet = DBPROPSET_DBINIT;
    rgIP.cProperties = 1;
    rgIP.rgProperties = iProp;
    ::CoInitialize(NULL);
    hr = CLSIDFromProgID(L"vfpoledb.1",&clsid); // Specify OLE DB Provider.
    hr = CoCreateInstance(clsid,
           NULL,
           CLSCTX_INPROC_SERVER,
           IID_IDBInitialize,
           (void**)&pIDBInitialize);
    
    // Initialize.
    hr = piDBInitialize->QueryInterface(_uuidof(IDBProperties), (void**)&pIDBProperties);
    hr = pIDBProperties->SetProperties(1 , &rgIP) ;
    hr = pIDBProperties->Release();
    hr = pIDBInitialize->Initialize();

Для доступа к источнику данных Visual FoxPro в ASP с помощью ActiveX Data Objects (ADO)

  1. Создайте страницу ASP с соответствующими тэгами HTML.

  2. Для установки соединения и запуска команд с использованием ADO, добавьте код Visual Basic Scripting Language (VBScript):

     CopyCode imageСкопировать код
    <%
        Set conn = Server.CreateObject("ADODB.Connection")
        conn.ConnectionString="Provider=VFPOLEDB.1;
           Data Source=myVFPDatabase.dbc"
        conn.Open
        sql = "select * from tableName"
        Set rsArrival = conn.Execute(sql)
    %>
    NoteЗамечание

    Убедитесь, что заменили tableName именем своей таблицы, которую вы желаете использовать.

Для доступа к источнику данных Visual FoxPro в JScript

  • Используйте строку соединения, для указания Visual FoxPro OLE DB Provider и источника данных так, как это показано в приведенном ниже программном коде:

     CopyCode imageСкопировать код
    var vbOKCancel = 0;
    var vbInformation = 64;
    var vbCancel = 2;
    var L_Welcome_MsgBox_Message_Text = "This script demonstrates how to access VFP OLE DB Provider using the Windows Scripting Host.";
    var L_Welcome_MsgBox_Title_Text = "VFP OLE DB Provider JScript Sample";
    var sBuffer = "";
    var sConnString = "Provider=vfpoledb.1;Data Source=myVFPDatabase.dbc";
    var oConn = new ActiveXObject("ADODB.Connection");
    var oRS = new ActiveXObject("ADODB.Recordset");
    oConn.Open(sConnString);
    oRS.Open("select * from tableName where fieldName1='fieldValue'",oConn,3,3);
    // Get tableName.fieldName2
    sBuffer = oRS.Fields('fieldName2').value;
    
    var WSHShell = WScript.CreateObject("WScript.Shell");
    var intDoIt;
    intDoIt =  WSHShell.Popup(sBuffer,
       0,
       L_Welcome_MsgBox_Title_Text,
       vbOKCancel );
       if (intDoIt == vbOKCancel) {
          oRS.Close();
          oConn.Close();
          WScript.Quit();
    }
    NoteЗамечание

    Убедить, что заменили myVFPDatabase, tableName, fieldName1, fieldName2 и fieldValue своими, соответствующими значениями. Вы должны использовать обратный слэш (\) для указания символов в пути к файлу, например: "c:\\MyFolder\\MyVFP.dbc".

Смотрите также