使用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);
}
if (await sqlReader.ReadAsync())
{
while (await sqlReader.ReadAsync())
...
在这里,您刚刚失去了一排。 while
就够了,不需要if
.