2014-10-06 42 views
1

你好女士們,先生們語法錯誤創建表C#

我有什麼,我認爲應該是一個簡單的解決方案,但無法找到它

基本上我創建通過SQL表strugling當我運行它時,SQL存在問題。 這裏是我的代碼:

OleDbCommand cmd = new OleDbCommand (@"CREATE TABLE " + ClientID + " (Transaction_ID INT PRIMARY KEY NOT NULL, Transaction CHAR(255), Date DATE, Transaction_Amount INT, Balance INT, Deposited INT, Withdrew INT, Loan INT, Applied INT, Approved INT, Payment_Monthly INT, Monthly_Income INT)", mydb);

現在我測試我的SQL語句來發現哪些SQL我的一部分,給出了錯誤,我發現,當我刪除TransactionDate它的工作領域。如果我只刪除其中一個,它仍然崩潰。我甚至試圖改變數據類型如CHAR(255)VARCHAR(255)DATEINT

說實話,我似乎無法找到問題。 請幫忙

謝謝你的時間。

PS:ClientID是三個數字和三個字母的組合,例如帶有標籤。 123#ABC

回答

6

這兩列名稱是SQL中的保留字。在方括號括起來將解決你的問題:

[Transaction] CHAR(255), 
[Date] DATE, 

請記住,您訪問動態SQL或存儲過程,這些領域的任何時間,你將不得不使用方括號爲好,即

SELECT * FROM ClientTable WHERE [Transaction] = 'A' 
+0

更好的解決方案是對這些列名更具體。通過交易確定OP的意思是TransactionId或TransactionCode或類似的東西?按日期是指處理日期,處理日期,批准日期,首次輸入日期?建議使用更具描述性的專欄名稱。 – NotMe 2014-10-06 18:07:49

+2

我完全同意,但有時候開發人員無法控制列名,他們必須能夠有辦法處理這些場景。例如,我們使用一個有15年曆史的應用程序,其列名與此類似,並基於源應用程序的脆弱性,我們不能嘗試更改列名稱,因此我們只剩下這種解決方法。顯然不理想,但它是一個真實的場景。 – 2014-10-06 18:13:10

+0

沒有解決的更大問題是表名:以數字開頭的表名將不工作。另外,根據SQL OP的使用風格,列名的關鍵字'Date'可能不需要被轉義(它在MS SQL 2012中不起作用)。 – Michael 2014-10-06 19:00:38