我是一名PHP開發人員,我需要從Windows機器導入一些文件,這些文件有一個真正的舊應用程序,一天兩次生成.MDB(Access數據庫)信息。我需要查詢這些MDB文件,只要它們在文件系統中創建,查詢數據並導入到現有的MySQL數據庫中。所有這些信息都應在Intranet上提供,並使用PHP開發。C# - FilesystemWatcher,MDB文件和MySQL
不幸的是,Linux沒有免費的ODBC驅動程序,所以我決定使用C#,創建一個應用程序來執行所需的操作。
有人可以給我一些建議,我必須閱讀嗎?
到目前爲止,我知道我必須使用System.IO中的FilesystemWatcher來獲取創建的事件。
目前我測試了一些與MDB數據庫的連接,但我無法從中檢索所有表。
我其實查詢:
select * FROM [Abertura Caixa];
有什麼辦法來查詢許多不同的表?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.OleDb;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\projects\\letseatdev\\public\\fechamentos\\LJ00004CX001DT03122016No0762Per02.mdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand("select * FROM [Abertura Caixa];", conn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(cmd);
DataSet myDataSet = new DataSet();
DataSet ds = new DataSet();
myDataAdapter.Fill(myDataSet, "Abertura Caixa");
myDataAdapter.Fill(myDataSet, "Caixa Local");
myDataAdapter.Fill(myDataSet, "Cartões Ocorrencias Local");
myDataAdapter.Fill(myDataSet, "Cartões Pagos Local");
myDataAdapter.Fill(myDataSet, "Clientes");
myDataAdapter.Fill(myDataSet, "CombosVendidos Local");
myDataAdapter.Fill(myDataSet, "CombosVendidosItens Local");
myDataAdapter.Fill(myDataSet, "Comissões Local");
myDataAdapter.Fill(myDataSet, "Conciliação de Caixa Local");
myDataAdapter.Fill(myDataSet, "Conta Corrente Assinada");
myDataAdapter.Fill(myDataSet, "Contas Canceladas Local");
myDataAdapter.Fill(myDataSet, "Contas Reimpressas Local");
myDataAdapter.Fill(myDataSet, "Contra Vales Emitidos Local");
myDataAdapter.Fill(myDataSet, "CupomReferenciado");
myDataAdapter.Fill(myDataSet, "Descontos Local");
myDataAdapter.Fill(myDataSet, "Devolucao");
myDataAdapter.Fill(myDataSet, "ECF Log Local");
myDataAdapter.Fill(myDataSet, "Fechamento de Caixa");
myDataAdapter.Fill(myDataSet, "Fidelidade Local");
myDataAdapter.Fill(myDataSet, "Giro de Mesas Local");
myDataAdapter.Fill(myDataSet, "Inventario Local");
myDataAdapter.Fill(myDataSet, "Invetario_SPED");
myDataAdapter.Fill(myDataSet, "Mapa Resumo Local");
myDataAdapter.Fill(myDataSet, "NF_Referenciada");
myDataAdapter.Fill(myDataSet, "Pedidos Cancelados Local");
myDataAdapter.Fill(myDataSet, "PedidosOnline Local");
myDataAdapter.Fill(myDataSet, "Penduras");
myDataAdapter.Fill(myDataSet, "Produto Local");
myDataAdapter.Fill(myDataSet, "Sangrias Local");
myDataAdapter.Fill(myDataSet, "Totalizador Local");
myDataAdapter.Fill(myDataSet, "Transferencia Estoques");
myDataAdapter.Fill(myDataSet, "Transferencia Mesa Local");
myDataAdapter.Fill(myDataSet, "Transporte");
myDataAdapter.Fill(myDataSet, "ComissoesCanceladas Local");
myDataAdapter.Fill(myDataSet, "ECF Item Log Local");
myDataAdapter.Fill(myDataSet, "Livros Fiscais");
myDataAdapter.Dispose();
conn.Close();
int i = 0;
for (i = 0; i <= myDataSet.Tables["ECF Item Log Local"].Rows.Count - 1; i++)
{
Console.WriteLine(myDataSet.Tables["ECF Item Log Local"].Rows[i].ItemArray[1]);
}
System.Threading.Thread.Sleep(15000);
}
}
}
}
編輯1 -
新代碼。它不斷從表格「Abertura Caixa」中檢索:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.OleDb;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\projects\\letseatdev\\public\\fechamentos\\LJ00004CX001DT03122016No0762Per02.mdb");
conn.Open();
DataSet myDataSet = new DataSet();
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand("select * FROM [Abertura Caixa];", conn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(cmd);
myDataAdapter.Fill(myDataSet, "Abertura Caixa");
OleDbCommand cmd2 = new OleDbCommand("select * FROM [Caixa Local];", conn);
OleDbDataAdapter myDataAdapter2 = new OleDbDataAdapter(cmd);
myDataAdapter2.Fill(myDataSet, "Abertura Caixa");
OleDbCommand cmd3 = new OleDbCommand("select * FROM [ECF Item Log Local];", conn);
OleDbDataAdapter myDataAdapter3 = new OleDbDataAdapter(cmd);
myDataAdapter3.Fill(myDataSet, "ECF Item Log Local");
conn.Close();
int i = 0;
for (i = 0; i <= myDataSet.Tables["ECF Item Log Local"].Rows.Count - 1; i++)
{
Console.WriteLine(myDataSet.Tables["ECF Item Log Local"].Rows[i].ItemArray[3]);
}
System.Threading.Thread.Sleep(15000);
}
}
}
}
謝謝你。我現在因爲TableName空格而出錯,所以我做了:OleDbCommand cmd = new OleDbCommand(「SELECT * FROM \」「+ table +」\「;」,conn);仍然不工作=/ –
我應該使用[]來代替。 OleDbCommand cmd = new OleDbCommand(「SELECT * FROM [」+ table +「];」,conn); –
哦,是的,這些名稱包含空格..你需要在他們的名字周圍的方括號 – Steve