2012-02-21 190 views
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。

在此先感謝您的幫助。

回答

1

這個問題似乎是)在更新語句的末尾:

UPDATE MYTABLE SET NAME=?, DOUBLECOLUMN=? WHERE ID = ?) 

應該

UPDATE MYTABLE SET NAME=?, DOUBLECOLUMN=? WHERE ID = ? 
+0

你知道,這就是使得在兩個變化的時期之一在半夜的同一時間正在咬我。非常感謝您注意到這一點並回復。 :-) – alokoko 2012-02-21 10:07:32