I'm not super-skilled at ASP.NET, however I have a web application which HAD to be written in ASP.NET C#, and I'm having trouble with a page that loads data from the database and puts it into a table. Below is my code. Basically, what happens is it will intermittently say "Page can not be displayed" when trying to load. It ALWAYS takes about 10-20 seconds to load the page and I KNOW I'm doing something wrong. Can someone please point out my mistake?
using (SqlConnection dbConn = new SqlConnection(strConnection))
{
SqlDataAdapter dbAdapter = new SqlDataAdapter();
SqlCommand dbCommand = new SqlCommand();
dbConn.Open();
// I tried the SET ARTITHABORT portion below based on other posts I found on SO - no better performance though
dbCommand.Connection = dbConn;
dbCommand.CommandText = "SET ARITHABORT ON";
dbCommand.ExecuteNonQuery();
dbCommand.CommandText = @"SELECT ID, NAME, PART_NUMBER, BARCODE, QOH, MINIMUM_QOH, LAST_PRICE FROM INVENTORY" + Session["table_extension"].ToString();
dbCommand.Connection = dbConn;
SqlDataReader dbReader = dbCommand.ExecuteReader(CommandBehavior.CloseConnection);
if (dbReader.HasRows)
{
strInventoryTable = @"<table id='inventoryTable' cellspacing='0' cellpadding='5' border='0' width='100%'>
<thead>
<tr>
<th>Name</th>
<th>Part No.</th>
<th>Barcode</th>
<th>QOH</th>
<th>Min. QOH</th>
<th>Last Price</th>
<th>Action</th>
</tr>
</thead>
<tbody>";
string rowMarker = "even";
while (dbReader.Read())
{
if (rowMarker == "even")
{
strInventoryTable += "<tr class='even clickable' onclick='location.href=\"edit_product.aspx?id=" + dbReader["ID"] + "\";'>";
rowMarker = "odd";
}
else
{
strInventoryTable += "<tr class='odd clickable' onclick='location.href=\"edit_product.aspx?id=" + dbReader["ID"] + "\";'>";
rowMarker = "even";
}
strInventoryTable += "<td>" + dbReader["NAME"] + "</td>";
strInventoryTable += "<td class='tdCenter'>" + dbReader["PART_NUMBER"] + "</td>";
strInventoryTable += "<td class='tdCenter'>" + dbReader["BARCODE"] + "</td>";
strInventoryTable += "<td class='tdRight'>" + dbReader["QOH"] + "</td>";
strInventoryTable += "<td class='tdRight'>" + dbReader["MINIMUM_QOH"] + "</td>";
strInventoryTable += "<td class='tdRight'>" + globals.formatMoney(dbReader["LAST_PRICE"].ToString()) + "</td>";
strInventoryTable += "<td class='tdCenter'><a href='edit_product.aspx?id=" + dbReader["ID"] + "'>Edit</a> ";
strInventoryTable += "<a href='delete_product.aspx?id=" + dbReader["ID"] + "'>Delete</a></td>";
strInventoryTable += "</tr>";
}
strInventoryTable += "</tbody></table>";
}
else
{
strInventoryTable = "<p><strong><em>No inventory found in database</em></strong></p>";
}
}
inventoryTable.InnerHtml = strInventoryTable;
The query itself takes like 0.00003 seconds to complete. So I know it's not the query, and I'm only returning around 2,400 rows.
UPDATE
Trying to debug where the bottle neck is... here are the results
Query started:3/24/2016 9:06:06 AM
Query finished: 3/24/2016 9:06:06 AM
Data reader started: 3/24/2016 9:06:06 AM
Data reader ended: 3/24/2016 9:06:43 AM
So my issue is definitely in the while (dbReader.Read()) {} loop