如何在C#中使用动态名称在microsoft访问中创建表?

时间:2013-03-24 09:28:08

标签: c# database ms-access oledb

我可以在代码中创建具有唯一名称的表,但是当我想创建一个具有动态名称的表时,通过使用文本框的内容,它会在消息框中显示“CREATE TABLE语句中的语法错误”。 我的代码:

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!");
        }
    }

有什么问题?

1 个答案:

答案 0 :(得分:5)

您的表名包含空格。你需要用方括号封装它 请写下这个

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

但是,我强烈建议你避免这种情况 在将来,您将始终必须这样做,因为您写的每个查询 一个简单的众所周知的解决方法是使用下划线而不是空格。

然后,看着你的字段名称,我注意到一个名为SIZE的字段 这是reserved keyword for MS Access。你将在这里遇到同样的问题。 每个使用该字段的查询都需要将名称封装在方括号中,
再次,为了您未来的心理健康,请更改该名称。 : - )