2013-03-24 75 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。你会在这里遇到同样的问题。 每个使用该字段的查询都需要将名称封装在方括号中,
再次,为了您将来的心理健康,请更改该名称。 :-)

相关问题