【问题标题】:Blob storage id can not inserting to Azure SQL database through Azure functionBlob 存储 ID 无法通过 Azure 函数插入到 Azure SQL 数据库
【发布时间】:2018-11-24 00:01:42
【问题描述】:

我创建了一个函数应用程序,目的是将 blob 存储文本详细信息插入 Azure 数据库 “标题”列在创建,函数调用“BlobTriggerCSharp1”并用c#创建

#r "System.Configuration"
#r "System.Data"
using System.Configuration;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System;

public static void Run(Stream myBlob, string name, TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
    string detail = ($"{name}");


    var str = ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(str))
    {
        conn.Open();
        var text = "INSERT INTO PhotoTable(ID,CreatedAt,UpdatedAt,IsDeleted, Url, Title)VALUES (284,SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(), 'true', 'yrhrh', {name})";

        using (SqlCommand cmd = new SqlCommand(text, conn))
        {
            // Execute the command and log the # rows affected.
            var rows = cmd.ExecuteNonQueryAsync();
            log.Info($"{rows} rows were updated");
        }
    }
}

所以当文本 blob 上传函数触发器但它没有将 blob id 输入到 Azure SQL 数据库中的列(数据库列在查询 ID、CreatedAt、UpdatedAt、IsDeleted、Url、Title 中定义)为它在上面显示我要传递给数据库的参数是“{name}”(因为 Name:{name} 是 blob-storage 中 id 的变量),它是 Blob-storage 的唯一 id(换句话说需要将 {name} 转移到数据库中的 Title 列),我很困惑我错过了什么,不知道我的转移方式是错误的,否则数据类型是错误的,所以很困惑和卡住,帮助将是非常感谢,谢谢

【问题讨论】:

  • 我明白你很困惑,但我不明白 1) 你想要的结果是什么 2) 你目前的问题是什么。请进行编辑以使其更清晰。
  • 一件事是您的 INSERT 没有像您预期的那样使用字符串插值:$"INSERT..."。虽然为什么要使用字符串插值?您应该始终参数化查询以避免注入。
  • @Mikhail,谢谢您的回复,1)我的应用程序所做的过程是,当用户输入文本(例如:名称)时,文本会进入 blob 并保存在存储文本 blob,例如名称、任务、工作编号,我的要求是我的应用程序中有一个历史记录页面,用户可以在其中找到他们使用工作编号输入的工作,所以 blob 存储只是存储数据,我想使用与 AzSQL 连接的函数将上传数据存储在表中,并使用另一个函数检索回应用程序以显示历史记录,但我仍然坚持第一部分,将 blob 数据发送到数据库
  • @juunas,感谢您的回复,但我曾经向服务器编写 php 服务,但这个 Azure 概念不同,所以我不知道我必须编写哪些 sql 语句才能进行插入我得到的带有 jason 参数的声明,如果您有任何建议,请告诉我,谢谢,
  • 检查@Mikhail 的回答:)

标签: azure azure-sql-database azure-blob-storage azure-functions


【解决方案1】:

您应该更改您的 INSERT 语句以向其中添加参数。这是Name 的示例:

var text = "INSERT INTO PhotoTable(ID,CreatedAt,UpdatedAt,IsDeleted, Url, Title) " +
           "VALUES (284,SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(), 'true', 'yrhrh', @Name)";

using (SqlCommand cmd = new SqlCommand(text, conn))
{
    cmd.Parameters.AddWithValue("@Name", name);

    // Execute the command and log the # rows affected.
    var rows = cmd.ExecuteNonQueryAsync();
    log.Info($"{rows} rows were updated");
}

【讨论】:

  • 您的解决方案非常适合我,非常感谢,对解决方案有一个子问题,现在我们正在获取 blob 存储的唯一 ID,我可以通过它们插入内容的任何方式吗那个blob存储到sql表?现在的示例唯一的 blobID 包含内部用户的名称,但仅使用 blobID 更新表是他们可以在 SQL 名称列内的 blobstorage 的名称属性中输入详细信息的任何方式??? (顺便说一下,在我的 sql 中有 ID、Name、url 等列)
  • 如果需要插入内容,可以将myBlob的类型从Stream改为byte[],然后在表格中添加一列,插入语句和参数。我在你第二个问题的第二部分迷路了......只需尝试类似于你已经工作的东西。
  • 按照您的指示,我已将 Stream 更改为 byte[],如下所示
  • public static void Run(byte[] myBlob, string name, TraceWriter log) 并且我保留了之前的参数,var text = "INSERT INTO PhotoTable(ID,CreatedAt,UpdatedAt,IsDeleted, Url , 标题) " + "值 (555,SYSDATETIMEOFFSET(),SYSDATETIMEOFFSET(), 'true', 'yrhrh', @Name)";使用 (SqlCommand cmd = new SqlCommand(text, conn)) { cmd.Parameters.AddWithValue("@Name", name); // 执行命令并记录受影响的 # 行。 var rows = cmd.ExecuteNonQueryAsync(); log.Info($"{rows} 行已更新")
  • 但是sql数据库列没有更新里面的值
猜你喜欢
  • 2021-04-07
  • 2021-01-26
  • 2018-04-13
  • 2019-06-10
  • 1970-01-01
  • 2019-11-13
  • 2016-10-02
  • 2021-01-09
  • 1970-01-01
相关资源
最近更新 更多