如何在c#中创建动态名称的microsoft access表

本文关键字:microsoft access 动态 创建 | 更新日期: 2023-09-27 18:05:36

我可以在代码中创建具有唯一名称的表,但是当我想创建具有动态名称的表时,通过使用文本框的内容,它会在消息框中显示"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!");
        }
    }

有什么问题吗?

如何在c#中创建动态名称的microsoft access表

表名中包含一个空格。您需要用方括号封装它。就这样写

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

但是,我强烈建议你避免这样做。

在将来,您将总是必须这样做,为您编写的每个查询。
一个简单的解决方法是使用下划线代替空格。

并且,查看您的字段名,我注意到一个名为SIZE的字段。
这是为MS Access保留的关键字。你在这里也会面临同样的问题。每个使用该字段的查询都需要将名称封装在方括号中,
再说一遍,为了你将来的精神健康,改个名字吧。: -)

注- 7年后
回头看看这个答案,虽然是正确的,但它缺少了重要的一点。
从上面的代码中,不可能知道用于定义表名的输入值是否安全。如果您让用户输入这些名称,那么他们可能会输入非常讨厌的字符串,这些字符串与您当前的字符串相结合,可能会对您的数据库造成严重破坏。这种黑客以Sql注入的名义而闻名,解决方案总是相同的。您应该使用参数将值传递给数据库,如果因为参数不能用于表示表或列名而无法做到这一点,那么您应该强制用户从一组名称中进行选择,而不允许他们键入任何字符串。