【问题标题】:Store A List Of Data In Mysql DataBase?在 Mysql 数据库中存储数据列表?
【发布时间】:2019-02-06 17:07:29
【问题描述】:

我有一个字符串数据列表,我想存储在我的 MySQL 数据库表中的“类别”列中。

有没有办法随时存储它,因为它的列表很长。`

  public Class PickerView{
  List<string> CategoriesPicker = new List<string>();
  public Button SaveItemsButton = new Button();
  public  PickerView()
    {

        CategoriesPicker.Items.Add("Hotels & Travel");
        CategoriesPicker.Items.Add("Restaurant");
        CategoriesPicker.Items.Add("Wholesalers");
        CategoriesPicker.Items.Add("Automotives");
        CategoriesPicker.Items.Add("Pets");
        CategoriesPicker.Items.Add("Musical Instruments Services");
        CategoriesPicker.Items.Add("Specialty Food");
        CategoriesPicker.Items.Add("Food");
        CategoriesPicker.Items.Add("Boutique");
        CategoriesPicker.Items.Add("Home & Gardens");
        CategoriesPicker.Items.Add("Shopping");
        CategoriesPicker.Items.Add("Education");
        CategoriesPicker.Items.Add("Books,Mags,Music & Video");
        CategoriesPicker.Items.Add("Fashion");
        CategoriesPicker.Items.Add("Event Planning & Services");
        CategoriesPicker.Items.Add("Arts & Craft");
        CategoriesPicker.Items.Add("Local Services");
        CategoriesPicker.Items.Add("NightLife(Bars..)");

        SaveItemsButton.Clicked += SavedItemsButton_Clicked
    }
    private void SavedItemsButton_Clicked(object sender, System.EventArgs e)
    {
         string sqlstring = "server=; port= ; user id =;Password= ;Database=test;";
        MySqlConnection conn = new MySqlConnection(sqlstring);
        try
        {
            conn.Open();
        }
        catch (MySqlException ex)
        {
            throw ex;
        }
        string Query = "INSERT INTO test.maintable (Categories)values('" +(**//I DONT KNOW WHAT TO WRITE HERE TO SAVE ALL AT ONCE**) + "');";
        MySqlCommand cmd = new MySqlCommand(Query, conn);
        cmd.ExecuteReader();
        conn.Close();
    }
 }`

点击SaveItemsButton时如何将CategoriesPicker中的项目列表保存到数据库中。

【问题讨论】:

  • “随时存储”是什么意思?您尝试了哪些方法,哪些方法无效?
  • 一个可能的选择是MySqlBulkLoader
  • @David 一次存储所有内容,而不是一次存储一个
  • @loisbotwe:在这种情况下,前面提到的批量加载器类可能是最好的选择。另一种选择可能是创建一堆插入语句,然后批量执行它们,如果驱动程序支持,可能作为一个用分号分隔的大 SQL 命令。
  • @stuartd 我的数据不在文件中,它在 c# 的列表中。

标签: c# mysql database


【解决方案1】:

简单使用mysql insert into 语句。

插入 tbl1 值 (1, 'Name1', 1, null), (2, 'Name2', 2, 空), (3, 'Name3', 1, null);

(3, 'Name3', 1, null) 当然是tbl1的结构 这将适用于您使用的任何语言,甚至在命令行中

【讨论】:

  • 你是说没有办法一次存储,除非单独存储。
【解决方案2】:

MySQL(和 MariaDB)don't have list-valued column types,因为这在数据库设计中与 first normal form 背道而驰。

您所做的是 @nbk 建议的,并使用您选择的任何数据库框架插入多行。以下是 MariaDB/MySQL 的示例表定义(如果您还没有):

Microsoft 当前推荐的与数据库交互的方式是Entity Framework Core。那里的文档可以帮助您连接到数据库、创建表、向表中添加行并将所有内容保存到数据库中。

希望有帮助!

【讨论】:

    【解决方案3】:

    我在您的代码中添加了 using 块,以确保即使出现错误,您的数据库对象也已关闭和处置。

    只设置一次查询文本,循环的每次迭代都保持不变。同样,参数被添加到循环之外。只有参数的值在循环内改变。我们使用 .ExecuteNonQuery(不是阅读器)进行插入、更新或删除。 .ExecuteReader 用于返回数据。

        private List<string> CategoriesPicker = new List<string>();
        //add all the items to the list
        private void SavedItemsButton_Clicked(object sender, System.EventArgs e)
        {
            string sqlstring = "server=; port= ; user id =;Password= ;Database=test;";
            using (MySqlConnection conn = new MySqlConnection(sqlstring))
            {
                string Query = "INSERT INTO test.maintable (Categories)values(@Category);";
                using (MySqlCommand cmd = new MySqlCommand(Query, conn))
                {
                    cmd.Parameters.Add("@Category", MySqlDbType.VarChar);
                    try
                    {
                        conn.Open();
                    }
                    catch (MySqlException ex)
                    {
                        throw ex;
                    }
                    foreach (String item in CategoriesPicker)
                    {
                        cmd.Parameters["@Category"].Value = item;
                        cmd.ExecuteNonQuery();
                    }
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多