1
我們的應用程序使用H2Sharp從C#(Framework v4)訪問H2數據庫。最近,我們遇到了以下問題:「」下面的代碼H2中的語法錯誤
H2DataAdapter adapter;
DataTable table;
//initialize values
H2Command updateCommand = new H2Command("UPDATE MYTABLE SET [email protected], [email protected] WHERE ID = @ID)", connection);
updateCommand.Parameters.Add(new H2Parameter("@NAME", DbType.String, 100, "NAME"));
updateCommand.Parameters.Add(new H2Parameter("@DOUBLECOLUMN", DbType.Double, 8, "DOUBLECOLUMN"));
updateCommand.Parameters.Add(new H2Parameter("@ID", DbType.StringFixedLength, 50, "ID"));
adapter.UpdateCommand = updateCommand;
導致一個語法錯誤,後來在與培養下使用時下列形式使用時「」作爲小數點分隔符,而不是:如果用戶輸入的是雙無小數部分(即39級的作品,但39.5不工作)
DataRow row = somehow_get_the_row();
row["NAME"] = "name";
row["DOUBLECOLUMN"] = some_double_with_fractional_part;
adapter.Update(table);
的代碼工作正常。我假設39.5也可以工作,但用戶界面不允許不包含在CurrentCulture.NumberFormat.NumberDecimalSeparator
中的字符,因此無法輸入「。」。在這種情況下。
堆棧(直到我們的代碼)的頂部是這樣的:
h2-1.3.160.dll!org.h2.jdbc.JdbcConnection.prepareStatement(string str) + 0x1f4 bytes
H2Sharp.dll!System.Data.H2.H2Command.CreateStatement() Line 335 + 0x35 bytes
H2Sharp.dll!System.Data.H2.H2Command.EnsureStatment() Line 368 + 0x8 bytes
H2Sharp.dll!System.Data.H2.H2Command.ExecuteNonQuery() Line 438 + 0x8 bytes
System.Data.dll!System.Data.Common.DbDataAdapter.UpdateRowExecute(System.Data.Common.RowUpdatedEventArgs rowUpdatedEvent, System.Data.IDbCommand dataCommand, System.Data.StatementType cmdIndex) + 0x4f bytes
System.Data.dll!System.Data.Common.DbDataAdapter.Update(System.Data.DataRow[] dataRows, System.Data.Common.DataTableMapping tableMapping) + 0x6bc bytes
System.Data.dll!System.Data.Common.DbDataAdapter.UpdateFromDataTable(System.Data.DataTable dataTable, System.Data.Common.DataTableMapping tableMapping) + 0x2a bytes
System.Data.dll!System.Data.Common.DbDataAdapter.Update(System.Data.DataTable dataTable) + 0xb2 bytes
和錯誤消息是
org.h2.jdbc.JdbcSQLException occurred
Message=Syntax error in SQL statement "UPDATE MYTABLE SET NAME=?, DOUBLECOLUMN=? WHERE ID = ?)"
Source=h2-1.3.160
我假定「」從雙字符串表示在這種文化正在打破SQL語句。
什麼是正確的方式來得到這項工作?數據庫表應該包含double類型的列,但是參數是以不變文化格式化的字符串傳遞的? H2會在這種情況下正確解析嗎?
代碼在Windows 7,x64和H2下運行數據庫是v1.3.160。
在此先感謝您的幫助。
你知道,這就是使得在兩個變化的時期之一在半夜的同一時間正在咬我。非常感謝您注意到這一點並回復。 :-) – alokoko 2012-02-21 10:07:32