我正在編寫一個c#/ .net4.0程序來替換access vba模塊。我從運行相同的查詢中得到不同的結果。在c#中查詢和訪問vba產生不同的結果
VBA查詢:
dbs.Execute "INSERT INTO tmpTable (L1, D1, L2, UserID, FmN) " & _
"SELECT Table1.Field1, Table2.Field1, " & _
"Sum(Table2.Field2) AS SumOfNoWork, '" & stringUser & "' AS Expr1, 'rampup' AS Expr2 " & _
"FROM Table1 INNER JOIN Table2 ON Table1.Field2 = Table2.Field3 " & _
"WHERE (((Table2.Field4) = 6)) " & _
"GROUP BY Table1.Field1, Table2.Field1, '" & stringUser & "', 'rampup';"
C#查詢:
string exec1 = "INSERT INTO tmpTable (L1, D1, L2, UserID, FmN) " +
"SELECT Table1.Field1, Table2.Field1, " +
"Sum(Table2.Field2) AS SumOfNoWork, '" + stringUser + "' AS Expr1, 'rampup' AS Expr2 " +
"FROM Table1 INNER JOIN Table2 ON Table1.Field2 = Table2.Field3 " +
"WHERE (((Table2.Field4) = 6)) " +
"GROUP BY Table1.Field1, Table2.Field1, '" & stringUser & "', 'rampup';";
using (OleDbConnection conn = new OleDbConnection(strconn))
{ conn.Open(); OleDbCommand comm = new OleDbCommand(exec1, conn);
comm.ExecuteNonQuery(); conn.Close(); }
我跑兩者對比後的結果。從插入查詢中查看tempTable,字段D1和FmN是相同的,但L1和L2在100行中的11行中的c#和vba版本之間不同。而且,它們以不同的順序插入。
在c#版本中沒有任何異常,但這可能是訪問表達式服務的結果嗎?爲什麼行會插入不同的順序和vba和ace.oledb.12.0之間的一些不同?
編輯:我發現了一些我以前沒有注意到的東西 - L1和L2是長整數類型,D1是datetime,userid和fmn是字符串。在執行這些之後,插入到tmpTable中的行與datetime D1的順序完全不同。如果我用D1對錶格進行排序並比較兩者的結果,那麼除了L1和L2不同的100行中的11行之外,所有數據都是相同的。在仔細觀察之後,數據是相同的,只是對於這11行,日期時間是相同的,所以它們不能正確排序。
問題是:爲什麼在Access/vba與c#/。net/ace.oledb.12.0之間執行相同查詢時,查詢插入行的順序與D1不同?
你在C#代碼中使用了什麼連接字符串? – mellamokb
Just:Provider = Microsoft.ACE.OLEDB.12.0; Data Source = pathtodb.mdb。這可能與它有關嗎? – Alex
不應該在'WHERE'子句之前的C#查詢中有多餘的空間嗎? –