gpt4 book ai didi

c# - SQL DataReader 在循环中缺少一行

转载 作者:行者123 更新时间:2023-11-30 19:35:13 24 4
gpt4 key购买 nike

运行以下代码时,它会遗漏一行。当我执行 files.Count 时,它说有 4 行,但没有为第 4 行存储数据。当我从 SQL Manager 中运行存储过程时,它返回所有 4 行和所有数据。有帮助吗?

            List<File> files = new List<File>();
SqlConnection active_connection = new SqlConnection(m_connection_string);
SqlCommand cmd = new SqlCommand();
SqlDataReader dr = null;

try
{
active_connection.Open();
cmd.Connection = active_connection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dalsp_Select_Organization_Files";

SqlParameter param;

param = cmd.Parameters.Add("@p_organization_guid", SqlDbType.UniqueIdentifier);
param.Value = new Guid(organization_guid);

param = cmd.Parameters.Add("@p_file_type", SqlDbType.NVarChar, 50);
param.Value = file_type;

dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

if (dr.HasRows)
{
while (dr.Read())
{
File file = new File();
file.OrganizationGuid = dr["OrganizationGuid"].ToString();
file.FileGuid = dr["FileGuid"].ToString();
file.FileLocation = dr["FileLocation"].ToString();
file.FileName = dr["FileName"].ToString();
file.FileType = (FileTypeEnum)Enum.Parse(typeof(FileTypeEnum), dr["FileType"].ToString());
file.FileExtension = dr["FileExtension"].ToString();
file.FileDescription = dr["FileDescription"].ToString();
file.ThumbnailPath = dr["ThumbnailPath"].ToString();
files.Add(file);
}
}
dr.Close();
dr = null;

active_connection.Close();
cmd = null;

}
catch (Exception)
{
throw;
}
finally
{
if (active_connection.State != ConnectionState.Closed)
{
active_connection.Close();
active_connection.Dispose();
}
}

return files;

最佳答案

如果您说您的文件集合有 4 个项目,但第 4 个项目不包含任何值,这是什么意思?是null,对象没有数据,还是抛出index out of range异常?

你是在做文件[4]还是类似下面的事情?

for(int x = 1; x < files.length; x++)
{
files[x]
}

那是行不通的。记住 C# 中基于 0 的索引。

作为旁注,您可以通过执行以下操作来取消 try catch 语句:

using (SqlConnection connection = new SqlConnection(conn_string))
{
connection.Open();
using (SqlCommand cmd = new SqlCommand("SELECT * FROM MyTable", connection))
{
using (SqlDataReader dr = cmd.ExecuteReader())
{
return result;
}
}
}

using 语句将保证处理(并因此关闭)读取器和连接。

关于c# - SQL DataReader 在循环中缺少一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/304430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com