使用SqlDataReader.ReadAsync()和插入输出的sql查询时丢失行数据

本文关键字:查询 sql 数据 输出 ReadAsync SqlDataReader 插入 使用 | 更新日期: 2023-09-27 18:31:21

>我有这样一段代码,执行后我在数据库表中得到 N 行,并从方法返回 N-1 行数据。无法理解我做错了什么,也找不到类似问题的任何示例。我是否因为 sql 查询而丢失数据,或者我在代码中出错了?请帮忙。

    private String sqlCommandSample = "insert into [dbo].[SomeTable] " +
                         "(Title, Descript) " +
                         "output inserted.Title " +
                         "select Item.value('title[1]', 'nvarchar(max)'), Item.value('description[1]', 'nvarchar(max)') " +
                         "from @Xml.nodes('nodes/node') as Result(Item) " +
                         "where not exists (select * from [dbo].[SomeTable] " +
                         "where ([Title] = Item.value('Title[1]', 'nvarchar(200)')))";
    public async Task<List<String>> FillTableAsync(String sqlCommandString, GetArticleLink getArticleLink)
    {
        using (var sqlConnection = new SqlConnection(ConnectionString))
        {
            await sqlConnection.OpenAsync();
            using (var sqlCommand = new SqlCommand(sqlCommandString, sqlConnection))
            {
                using (var sqlReader = await sqlCommand.ExecuteReaderAsync())
                {
                    var listOfLinks = new List<String>();
                    if (await sqlReader.ReadAsync())
                    {
                        while (await sqlReader.ReadAsync())
                        {
                            listOfLinks.Add(await GetLink(sqlReader));
                        }
                    }
                    return listOfLinks;
                }
            }
        }
    }
    private async Task<String> GetLink(DbDataReader reader)
    {
        return await reader.GetFieldValueAsync<String>(0);
    }

使用SqlDataReader.ReadAsync()和插入输出的sql查询时丢失行数据

 if (await sqlReader.ReadAsync())
 {
     while (await sqlReader.ReadAsync())
     ...

在这里,您刚刚失去了一排。 while就够了,不需要if.