c# - 使用 Azure 函数从事件中心将数据插入 Sql Server

标签 c# sql-server azure azure-functions azure-eventhub

我正在使用 Azure 函数从事件中心将数据插入到 SQL Server 中。

我编写此代码是为了在 SQL Server 中插入数据,但我每次执行只能插入一条消息

public static void Run(string[] eventHubMessages, TraceWriter log)
{

  SqlConnection cnn = new SqlConnection();
  cnn.ConnectionString = /* my connection string */;
  cnn.Open();

  log.Info("Connection open");

  foreach(var item in eventHubMessages)
  {
    if(item.StartsWith("{") && item.EndsWith("}"))
    {
       SqlCommand cmd = new SqlCommand("TelemetriaAttiva.ImportEvents", cnn); // call stored procedure
       cmd.Parameters.AddWithValue("Events", item);
       cmd.CommandType = CommandType.StoredProcedure;
       cmd.ExecuteNonQuery();
    }
  }
}

存储过程代码为:

CREATE PROCEDURE [TelemetriaAttiva].[ImportEvents]  @Events NVARCHAR(MAX)
AS  BEGIN 
INSERT INTO TelemetriaAttiva.Events (IDType, PayloadType, SerialNumber, Cid, 
Year, Month, Day, Hour, Minute, Second, Sid, InsDate, InsUser) 
SELECT idtype, payloadtype, serialnumber, cid, year, month, day, hour, 
minute, second, sid, insdate, insuser FROM OPENJSON(@Events)
WITH(
    IDType varchar(50) '$.idtype',
    PayloadType varchar(50) '$.payloadtype',
    SerialNumber varchar(50) '$.serialnumber',
    Cid varchar(50) '$.cid',
    Year varchar(50) '$.year',
    Month varchar(50) '$.month',
    Day varchar(50) '$.day',
    Hour varchar(50) '$.hour',
    Minute varchar(50) '$.minute',
    Second varchar(50) '$.second',
    Sid varchar(50) '$.sid',
    InsDate varchar(50) '$.insdate',
    InsUser varchar(100) '$.insuser'
) 
END 
GO

有人可以帮助我在 Sql Server 上插入事件中心内的所有数据吗?

非常感谢!

最佳答案

所以,看起来您可以尝试以下操作:

  1. 将所有消息连接到一个 JSON 数组中,例如

    var items = $"[{string.Join(",", eventHubMessages)}]";
    
  2. 通过一次调用将它们全部传递给存储过程(与现在相同的调用,但没有任何 foreach 循环)

    cmd.Parameters.AddWithValue("Events", items);
    
  3. 调整存储过程以期望 JSON 中的项目数组而不是单个项目。

关于c# - 使用 Azure 函数从事件中心将数据插入 Sql Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49064666/

相关文章:

c# - dotnet 核心设置 Cache-Control 无效

c# - Knockout 中的 ASP.Net WebAPI Owin 身份验证 token

javascript - C# 和 JS 中的 WebSocketServers - 乱码

sql - 在一组重叠的、版本编号的间隔中,找到每个时间点的最新版本

sql-server - 为什么安装后找不到 SQL Server Management Studio?

azure - 在没有移动服务的情况下将图像上传到 Azure Blob 存储的体系结构

c# - LINQ 2 SQL 查询不适用于函数调用

sql - T-SQL 如何 "Flatten"前 3 行变成单行

azure - HTTPS 访问 Azure ubuntu 虚拟机

azure - 无法在 Azure 中使用 Webhook 传递属性注册事件网格订阅