1

我有一个从 MVC 控制器调用的 DAL 项目。我向该方法传递了我想要更新的对象列表。我添加了断点,它到达 ExecuteNonQueryAsync() 然后挂起。网站一直在“加载”,它永远不会返回 1;该查询在我尝试将其移动以执行异步之前有效(您可以看到我在哪里注释掉了查询的执行。我确实删除了连接打开/关闭部分,但在此之前查询工作正常。

我还更新了下面的代码,以便可以使用 OBJECT、ListObjects 和 COL1/COL2 发布它,而不是使用实际的值/对象名称。

提前致谢!

static async Task<int> NonQuery(System.Data.SqlClient.SqlConnection conn, System.Data.SqlClient.SqlCommand cmd)
    {
        await conn.OpenAsync();
        await cmd.ExecuteNonQueryAsync();
        return 1;
    }

public static bool updateQuery(List<OBJECT> listObjects)
    {
        string cnn = System.Configuration.ConfigurationManager.ConnectionStrings["connstring"].ToString();
        using (System.Data.SqlClient.SqlConnection mySqlConnection = new System.Data.SqlClient.SqlConnection(cnn))
        {
            StringBuilder SQLQuery = new StringBuilder();

            SQLQuery.AppendLine("UPDATE TABLENAME ");
            SQLQuery.AppendLine("SET COL1 = @COL1, ");
            SQLQuery.AppendLine("WHERE COL2 = @COL2 ");

            //mySqlConnection.Open();

            foreach (ObjectType ot in listObjects)
            {
                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(SQLQuery.ToString(), mySqlConnection);

                cmd.Parameters.Add("@COL1", System.Data.SqlDbType.Int).Value = COL1VALUE;
                cmd.Parameters.Add("@COL2", System.Data.SqlDbType.Int).Value = COL2VALUE;

                int result = NonQuery(mySqlConnection, cmd).Result;

                //cmd.ExecuteNonQuery();
            }
            //mySqlConnection.Close();
        }
4

1 回答 1

1

正如我在博客中所描述的,这是将代码转换为async. 正确的解决方案是将 allResultWait调用替换await为 ,如下所示:

public static async Task<bool> updateQueryAsync(List<OBJECT> listObjects)
{
  ...
  int result = await NonQueryAsync(mySqlConnection, cmd);
  ...
}

static async Task<int> NonQueryAsync(SqlConnection conn, SqlCommand cmd)

根据 TAP 文档的规定,我还更改了您的async方法以结束。Async

于 2013-10-09T15:05:11.243 回答