簡體   English   中英

創建參數為名稱的表 mysql (c#)

[英]create table with parameter as name mysql (c#)

我想為聊天程序中的每個聊天動態創建表格,但無法真正找到一種方法。 這是我試過的:

   string cmdct = "create table @parameter1 (message varchar(500), sender varchar(20), recieved varchar(5), sendtime varchar(60), deleted varchar(5))";
                MySqlCommand m2 = new MySqlCommand(cmdct, connect2);
            string name = "" +participant1+ "_" +participant3+ "";
            m2.Parameters.AddWithValue("@parametertb1", name);
           
       
                m2.Connection = connect2;
                connect2.Open();

                string MyConnection2 = connectionString2;
                MySqlConnection MyConn2 = new MySqlConnection(MyConnection2);
                
                errorbox.Content = "Loading...";

                MySqlDataReader MyReader2;
                MyConn2.Open();
                MyReader2 = m2.ExecuteReader();
               
                while (MyReader2.Read())
                {
                    errorbox.Content = "Creating chat...";
                }
                MyConn2.Close();

這是產生的錯誤:

MySql.Data.MySqlClient.MySqlException:“您的 SQL 語法有錯誤;請檢查與您的 MySQL 服務器版本相對應的手冊,以獲取在“part1_part2”附近使用的正確語法(消息 varchar(500),sender varchar(20) ), 在第 1 行得到 varchar(5),'

part1 和 part2 是我想聊天的用戶。

我想為每次聊天動態創建表格

這可能是個壞主意。 為所有聊天設置一張大桌子並通過識別數據來區分它們可能是一種更好的方法。 話說回來...

查詢參數用於值,而不是模式對象。 動態包含模式對象是字符串連接的工作。 可以想象,這會帶來 SQL 注入的風險。 所以你需要控制正在使用的值。 為此,這些participant1等變量來自哪里?

如果它們來自用戶輸入或任何間接用戶可修改的內容,那么您就處於危險之中。 但是,如果它們是您控制的值(例如他們無法編輯的用戶的內部標識符),那么您可以安全地在查詢的字符串連接中使用它們。

最終,您可能最好使用您控制的靜態架構,而不是您的用戶控制的動態架構。 例如,與其為“新聊天”創建一個新表,為什么不創建一個帶有簡單自動遞增鍵的“聊天”表和一個帶有“聊天”外鍵的“消息”表? 當然,“消息”會隨着時間的推移而大幅增長。 但這是不同解決方案的不同問題(並且您可以在決定它是否是問題之前進行測量)。

暫無
暫無

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

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