2013-03-24 34 views
2

我可以在代碼中創建具有唯一名稱的表,但是當我想使用文本框內容創建具有動態名稱的表時,請在消息框中顯示「CREATE TABLE語句中的語法錯誤」錯誤。 我的代碼:如何使用C#中的動態名稱在Microsoft Access中創建表?

private void createTableInDatabase(string fName, string lName) 
    { 
     OleDbConnection conn = new OleDbConnection(); 
     conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Project\Learning\Visual C#\Form\Tailor Assistance\Tailor Assistance\bin\Release\Tailor Assistance.mdb"; 
     conn.Open(); 
     string tableName = fName + " " + lName; 
     OleDbCommand cmmd = new OleDbCommand("", conn); 
     cmmd.CommandText = "CREATE TABLE " + tableName + "([ID] Counter Primary Key, [FirstName] Text, [LastName] Text, [Gender] Text, [Phone] Text, [CellPhone] Text, [FriendsFirstName] Text, [FriendsLastName] Text, [RegisterDate] Text, [Size] Text, [Description] Text)"; 
     if (conn.State == ConnectionState.Open) 
     { 
      try 
      { 
       cmmd.ExecuteNonQuery(); 
       MessageBox.Show("Add!"); 
       conn.Close(); 
      } 
      catch (OleDbException expe) 
      { 
       MessageBox.Show(expe.Message); 
       conn.Close(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Error!"); 
     } 
    } 

什麼問題?

回答

5

您的表名包含空格。你需要用方括號封裝它。
只要寫這個

string tableName = "[" + fName + " " + lName + "]"; 

,但我強烈建議你避免這種情況。
將來,您將永遠需要爲您編寫的每個查詢都這樣做。
一個簡單的衆所周知的解決方法是使用下劃線而不是空格。

而且,看着你的字段名稱,我注意到了一個名爲SIZE的字段。
這是一個reserved keyword for MS Access。你會在這裏遇到同樣的問題。 每個使用該字段的查詢都需要將名稱封裝在方括號中,
再次,爲了您將來的心理健康,請更改該名稱。 :-)

相關問題