【发布时间】:2018-03-02 07:42:10
【问题描述】:
我正在使用 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 上插入 Event Hub 内部的所有数据吗?
非常感谢!
【问题讨论】:
-
在c#中搜索批量插入,c-sharpcorner.com/UploadFile/0c1bb2/…
-
如果你必须调用一个SP并且你不能改变它,那么就没有办法同时为所有事件调用它。如果可以更改,请说明它的作用以及如何更改。
-
在您的 cmd.ExecuteNonQuery() 之后添加一条日志语句 - 如果每条消息都有一个日志条目,那么您的问题就在某处的存储过程中。能发一下proc的代码吗?
-
@MurrayFoxcroft 我贴出存储过程的代码
-
Proc 看起来不错 - 您是否也添加了日志条目?您收到预期的消息数量了吗?
标签: c# sql-server azure azure-functions azure-eventhub