c# - Azure 函数有时不会将行插入 SQL Server

标签 c# sql-server azure azure-functions

我创建了一个 Azure 函数。它工作正常,除了一件事:它并不总是将内容插入到 Azure SQL 服务器中,尽管内容始终相同。根据日志,该函数被触发,但没有插入任何行。看起来它是随机发生的。这是代码:

public static void Run(string myIoTHubMessage, TraceWriter log)
{
    log.Info(myIoTHubMessage);
    if (!string.IsNullOrEmpty(myIoTHubMessage))
    {
        try
        {
            var str = ConfigurationManager.ConnectionStrings["db-messaging"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(str))
            {
                conn.Open();
                log.Info("Connection opened");
                var text = $"INSERT INTO [dbo].[MESSAGE] VALUES ('{myIoTHubMessage}')";
                using (SqlCommand cmd = new SqlCommand(text, conn))
                {
                    var rows = cmd.ExecuteNonQueryAsync();                    
                }
            }
            log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
        }
        catch (Exception ex)
        {
            log.Error($"C# Event Hub trigger function exception: {ex.Message}");
        }
    }
}

最佳答案

在这种情况下,您应该在某处等待 ExecuteNonQueryAsync() 方法,或者不使用 Async 方法。

我认为您的 using block 在该方法完成之前就结束了。

额外说明:using block 确保调用 Dispose()。调用 Dispose() 是一件好事,因为您正在使用与外部资源(sql 服务器)的连接。如果您不调用 Dispose,连接可能会保持事件状态,而您的程序不再需要保留连接。

但是,由于未“等待”对异步方法的调用,因此程序在释放连接之前不会等待 ExecuteNonQueryAsync() 完成(因为它在“后台”运行)。

有时 ExecuteNonQueryAsync() 在调用 Dispose() 之前完成,有时 ExecuteNonQueryAsync() 太慢。 “运气”的问题。这解释了结果的差异。

关于使用 block :MSDN on using

关于 aysnc 方法:MSDN on Async Await

关于c# - Azure 函数有时不会将行插入 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46810582/

相关文章:

azure - ARM 模板部署 - 由于与并发请求错误冲突,请求失败

C# Excel (2003) 互操作 - 边距与输入值不对应?

c# - C# 如何访问另一个类中一个类的私有(private)函数?

SQL Server 查询 : what is the meaning of 'N' preceding a string?

Azure 数据工厂管道 - 将单值源查询输出存储为变量,然后在复制数据事件中使用

javascript - 有没有办法在 Azure 中模仿像 Mixpanel 这样的服务?

c# - 模拟实体 - Entity Framework 3.5

c# - 使用 NetTcpBinding WCF 服务获取 IEnumerable<T> 语义?

sql - 在 sql join 中不包括空值

mysql - 这个查询可以写在 MS SQL 服务器上吗?该查询适用于 MySQL,但在 MS SQL Server 上未提供所需的输出