Вопрос:
Я работаю с существующим коммерческим приложением MS Visual Foxpro, и мне нужно извлекать данные из базы данных напрямую, используя приложение c #. К сожалению, не все таблицы хранятся в одной базе данных, некоторые записи хранятся в базе данных с разбивкой по годам. Как создать запрос к этим двум базам данных, используя одно соединение?
Я использую Microsoft OLE DB Provider для Visual FoxPro 9.0 (SP2)
Подробнее:
По сути, информация о клиенте хранится в одной базе данных, а история покупок клиента хранится в базе данных с разбивкой по годам. Поэтому я пытаюсь создать простой запрос, чтобы распечатать клиентов и их последние покупки за этот год.
В графической форме файловая структура БД выглядит следующим образом:
Data\
+-2009\
| +-MyDB.dbc
| +-Sales.dbf
+-2010\
| +-MyDB.dbc
| +-Sales.dbf
+-MyDB.dbc
+-Customers.dbf
В настоящее время я могу подключиться к каждой БД индивидуально и запросить их:
// This works to connect to the customer DB
string connectionPath1 = @"Provider=vfpoledb.1;Data Source=E:\Data\MyDB.dbc";
OleDbConnection conn1 = new OleDbConnection(connectionPath1);
OleDbCommand command1 = new OleDbCommand(@"SELECT * FROM Customers", conn1);
OleDbDataReader reader1 = command1.ExecuteReader();
// This works to connect to the annual sales record DB
string connectionPath2 = @"Provider=vfpoledb.1;Data Source=E:\Data\2010\MyDB.dbc";
OleDbConnection conn2 = new OleDbConnection(connectionPath2);
OleDbCommand command2 = new OleDbCommand(@"SELECT * FROM Sales", conn2);
OleDbDataReader reader2 = command2.ExecuteReader();
Чего я не могу сделать, так это выполнить оператор соединения:
//How do I do this?
OleDbConnection connMagic = new OleDbConnection(connectionPath1, connectionPath2); //non-valid code
OleDbCommand commandIWant = new OleDbCommand(@"SELECT Customers.Name, Sales.Item, Sales.Date FROM Customers LEFT JOIN Sales ON (Customers.ID=Sales.CustomerID)", connMagic);
OleDbDataReader reader3 = commandIWant.ExecuteReader();