我想編寫一個c#應用程序,它將從表中讀取大量的Access查詢。該表將具有查詢的所有SQL語句。 查詢可能包含Access函數和方法,如InStr,DateAdd等。 在T-SQL中重寫所有這些語句並不是真的可行,因爲表將不斷添加新的查詢。使用C從VBA運行Access查詢#
簡而言之,是否可以從c#運行Access SELECT查詢(包含VBA函數),並將結果讀入DataTable?
我想編寫一個c#應用程序,它將從表中讀取大量的Access查詢。該表將具有查詢的所有SQL語句。 查詢可能包含Access函數和方法,如InStr,DateAdd等。 在T-SQL中重寫所有這些語句並不是真的可行,因爲表將不斷添加新的查詢。使用C從VBA運行Access查詢#
簡而言之,是否可以從c#運行Access SELECT查詢(包含VBA函數),並將結果讀入DataTable?
這似乎是一個奇怪的要求,但我確信做這種事情在技術上是可行的。
string strProvider = "@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Database3.accdb";
string strSql = "Select * from score";
OleDbConnection con = new OleDbConnection(strProvider);
OleDbCommand cmd = new OleDbCommand(strSql, con);
con.Open();
cmd.CommandType = CommandType.Text;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable scores = new DataTable();
da.Fill(scores);
dataGridView1.DataSource = scores;
而且還有異常處理。 。 。
try
{
Dataset myDataSet=new Dataset();
string connection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\Database3.accdb";
OleDbCommand cmd = new OleDbCommand("Select * from score", conn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(cmd);
connection .Open();
myDataAdapter.Fill(myDataSet,"TableName");
}
catch (Exception ex)
{
Console.WriteLine("Error: Failed to retrieve the required data from the DataBase.\n{0}", ex.Message);
return;
}
finally
{
connection .Close();
}
@ ryguy2的答案確實起作用。我仍然坐在一個問題是自定義的VBA功能。你知道在這些查詢中是否可以添加我的自定義VBA函數?使用上面的代碼,我會在表達式中得到「未定義函數'MyFunction'」。 –
您將不得不自動運行查詢,然後找到一種方法從Access讀取數據,也許通過臨時結果表。 –
從您的C#項目引用Microsoft Access互操作程序集,您將擁有幾乎相同的對象模型VBA代碼。關鍵是,它是Access運行查詢,而不是你的C#代碼; VBA的東西嵌入了Access數據庫,所以C#甚至不需要關心它。 –
訪問ODBC驅動程序的較舊的「Jet」'(* .mdb)'版本受其支持的內置「訪問函數」數量的限制。較新的「ACE」(* .mdb,* .accdb)ODBC驅動程序支持更廣泛的這些功能,包括'DateAdd','Replace'等等。您是否試過運行一些更具挑戰性的查詢C#使用'System.Data.Odbc'來查看它們是否會實際工作? –