簡體   English   中英

如何在 C# 中使用動態名稱在 microsoft access 中創建表?

[英]How to create table in microsoft access with dynamic name in C#?

我可以在代碼中創建具有唯一名稱的表,但是當我想創建一個具有動態名稱的表時,通過使用文本框的內容,它會在消息框中顯示“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!");
        }
    }

有什么問題?

您的表名包含一個空格。 你需要用方括號把它封裝起來。 就寫這個

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

但是,我強烈建議您避免這種情況。

將來,對於您編寫的每個查詢,您將始終必須這樣做。
一個眾所周知的簡單解決方法是使用下划線而不是空格。

而且,查看您的字段名稱,我注意到一個名為 SIZE 的字段。
這是MS Access保留關鍵字 您將在這里面臨同樣的問題。 每個使用該字段的查詢都需要將名稱封裝在方括號中,
再次,為了您未來的精神健全,請更改該名稱。 :-)

注意 - 7 年后
回顧這個答案,雖然正確,但缺少重要的一點。
從上面的代碼無法知道用於定義表名稱的輸入值是否安全。 如果您讓您的用戶鍵入這些名稱,則可能會輸入非常討厭的字符串,這些字符串與您當前的字符串組合可能會被用來對您的數據庫造成嚴重破壞。 這個 hack 以Sql Injection的名義廣為人知,解決方案總是相同的。 您應該使用參數將值傳遞給您的數據庫,如果這是不可能的,因為參數不能用於表示表或列名,那么您應該強制您的用戶從一組名稱中進行選擇,而不讓他們鍵入任何字符串.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM