【问题标题】:How to insert json from API to snowflake database using ADO.NET?如何使用 ADO.NET 将 API 中的 json 插入雪花数据库?
【发布时间】:2019-11-07 14:17:52
【问题描述】:

我想将 json 字符串插入到 ado.net C# 中的 Snowflake 变体列中,但由于互联网上的指令太少,我完全不知道如何实现它。例如,

var json = {
  "student": {
  "name": "John Smith",
  "age": 10
  }
}

dataAdapter.InsertCommand.CommandText = "INSERT INTO TestDemo SELECT PARSE_JSON(NOTIFICATION) FROM VALUES();";

这里我使用的是 github 上用于 .NET 的 snowfalke 连接器。https://github.com/snowflakedb/snowflake-connector-net

我想知道如何在命令文本中编写语法。非常感谢。

【问题讨论】:

    标签: c# .net json database snowflake-cloud-data-platform


    【解决方案1】:

    .Net 上的雪花不是我的菜,但从 github 煮一个例子可能会奏效。
    下面的查询至少允许插入,希望绑定字符串参数也可以:

    using (IDbConnection conn = new SnowflakeDbConnection())
    {
        conn.ConnectionString = connectionString;
        conn.Open();
    
        IDbCommand cmd = conn.CreateCommand();
        cmd.CommandText = "insert into TestDemo select parse_json(?)";
    
        var p1 = cmd.CreateParameter();
        p1.ParameterName = "1";
        p1.Value = "{""student"": ""John Smith""}";
        p1.DbType = DbType.String;
        cmd.Parameters.Add(p1);
    
        var count = cmd.ExecuteNonQuery();
        Assert.AreEqual(1, count);             
    
        conn.Close();
    }
    

    【讨论】:

    • 非常感谢。这样可行。我发现 ParameterName 必须是“1”或“2”,这些数字用来标记致盲值中的位置。再次感谢你。而且我认为这里不需要 IDataReader 和 Assert.AreEqual。
    • 我更喜欢使用位置绑定变量 :1、:2 等而不是 ?,但我不确定它如何与 .Net 一起使用。 IDataReader 和 Assert 不是必需的,但断言在原始代码中,我相信它会检查是否插入了 1 行。
    • 好的。谢谢你的建议。真的真的帮了我。
    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2020-09-29
    • 2021-08-01
    相关资源
    最近更新 更多