When running the following code it leaves out one row. When I do a files.Count it says there are 4 rows but there is no data stored for the 4th row. When I run the stored procedure from within SQL Manager it returns all 4 rows and all the data. Any help?
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;
If you are saying your files collection has 4 items, but the 4 item contains no value, what do you mean by that? Is it null, does the object have no data, or does it throw an index out of range exception?
Are you doing a files[4] or something like the following?
That won’t work. Remember 0 based indexing in C#.
As a side note, you could do away with your try catch statments by doing something like:
The using statement will guarantee disposal (and therefore the closing) of the reader and connection.