【问题标题】:c# - How to store json data into MySQLc# - 如何将json数据存储到MySQL中
【发布时间】:2019-01-11 22:55:15
【问题描述】:

我的 REST API 上有这个 JSON 数据,我想将它存储在我的 MySQL 服务器中

JSON 数据

[
    {
        "res_order_num": "1",
        "menu_code": "1",
        "menu_quantity": "2",
        "menu_total_price": "60",
        "res_no": "1",
        "menu_name": "Adobo Manok"
    },
    {
        "res_order_num": "2",
        "menu_code": "5",
        "menu_quantity": "2",
        "menu_total_price": "90",
        "res_no": "1",
        "menu_name": "Pritong Bangus"
    }
]

那么我如何将它存储在我的 MySQL 中。

【问题讨论】:

  • 您在保存数据时是否有任何错误?或者到目前为止你有没有完成任何代码?
  • @ropenrom 请详细描述问题
  • 我的 Windows 窗体上有这段代码 c# HttpClient client = new HttpClient(); var response = await client.GetStringAsync("example/Restserver/index.php/users/view"); var people = JsonConvert.DeserializeObject>(response); load_1 = people.Count; dataGridMember.DataSource = Persons;
  • @ropenrom24,您显示的上述代码用于从 api 获取数据并显示在 datagridview 中?您是否必须从 api 获取 json 数据或将其提供给 api 到数据库保存?
  • 是的,先生,它获取 json 数据并将其显示在 DataGridview 中。想知道的是如何将它直接存储在我的本地数据库中,而不是显示在datagridview上

标签: c# mysql json


【解决方案1】:

无需额外信息;您似乎没有太多现有代码。如果您尝试开始使用 c# 将数据保存到 MySQL 数据库; Microsoft 提供了本教程。但是,没有其他信息,没有多少人可以回答这个问题。

教程:https://msdn.microsoft.com/en-us/library/0f92s97z.aspx

如果您包含以下内容,人们可能会给出更好的答案:

  • 您是否有现有的代码可以读取或写入 MySQL?
  • 您是否设置了 MySQL 数据库?
  • 您的数据库是否有与 JSON 中表示的数据匹配的表?

【讨论】:

  • 是的先生,我在 localhost 上设置了一个 MySQL 数据库,并且数据库表与 JSON 数据匹配。
【解决方案2】:

解决办法:

var persons = JsonConvert.DeserializeObject<List<Member>>(response);

现在您可以循环访问以下项目。

foreach(Member person in persons )
{
    // add to db your each person
}

以及如何插入到 db : 对于 ADO.Net:https://msdn.microsoft.com/en-us/library/ms233812.aspx

对于实体框架:https://msdn.microsoft.com/en-us/library/ee712907(v=vs.113).aspx

【讨论】:

  • ,如果 json 有 1000 人,那么 foreach 迭代 1000 次和 1000 次数据库调用,所以这需要太多的执行时间和数据库行程
  • @ershoaib 您可以打开 connection 并添加 1000 条记录,然后在 foreach 之后在 Ado.Net 和 EF 中关闭您调用 SaveChanges();。
  • 不不,这需要 1000 次往返数据库,我认为使用批量插入很好
【解决方案3】:

如果您的 json 包含 0.....N 人,那么 BatchUpdate 对您来说是一个很好的解决方案,如果您有性能要求,这可能会减少您的数据库往返

以下方法包含BatchUpdate的样本

public void BatchUpdateToMySqlServer()
{
    var persons = JsonConvert.DeserializeObject<List<Member>>(response);

    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("res_order_num", typeof(System.String)));
    dt.Columns.Add(new DataColumn("menu_code", typeof(System.String)));
    dt.Columns.Add(new DataColumn("menu_quantity", typeof(System.String)));
    dt.Columns.Add(new DataColumn("menu_total_price", typeof(System.String)));
    dt.Columns.Add(new DataColumn("res_no", typeof(System.String)));
    dt.Columns.Add(new DataColumn("menu_name", typeof(System.String)));

    foreach (var item in persons)
    {
        DataRow dr = dt.NewRow();
        dr["res_order_num"] = item.res_order_num;
        dr["menu_code"] = item.menu_code;
        dr["menu_quantity"] = item.menu_quantity;
        dr["menu_total_price"] = item.menu_total_price;
        dr["res_no"] = item.res_no;
        dr["menu_name"] = item.menu_name;
        dt.Rows.Add(dr);
    }


    MySqlConnection con = new MySqlConnection("Your Connection String");
    if (con.State == ConnectionState.Open)
    {
        con.Close();
    }
    con.Open();
    MySqlCommand cmd = new MySqlCommand("Your Insert Command", con);
    cmd.CommandType = CommandType.Text;

    cmd.UpdatedRowSource = UpdateRowSource.None;

    MySqlDataAdapter da = new MySqlDataAdapter();
    da.InsertCommand = cmd;
    da.UpdateBatchSize = 100000; //If you json contains 100000 persons object;
    int records = da.Update(dt);
    con.Close();
}

如果您必须使用StoedProcedure 作为插入命令,Here 是一篇好文章。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 2023-03-05
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多