public static DataTable GetDataTable(SqlCommand sqlCmd)
{
DataTable tblMyTable = new DataTable();
DataSet myDataSet = new DataSet();
try
{
//1. Create connection
mSqlConnection = new SqlConnection(mStrConnection);
//2. Open connection
mSqlConnection.Open();
mSqlCommand = new SqlCommand();
mSqlCommand = sqlCmd;
//3. Assign Connection
mSqlCommand.Connection = mSqlConnection;
//4. Create/Set DataAdapter
mSqlDataAdapter = new SqlDataAdapter();
mSqlDataAdapter.SelectCommand = mSqlCommand;
//5. Populate DataSet
mSqlDataAdapter.Fill(myDataSet, "DataSet");
tblMyTable = myDataSet.Tables[0];
}
catch (Exception ex)
{
}
finally
{
//6. Clear objects
if ((mSqlDataAdapter != null))
{
mSqlDataAdapter.Dispose();
}
if ((mSqlCommand != null))
{
mSqlCommand.Dispose();
}
if ((mSqlConnection != null))
{
mSqlConnection.Close();
mSqlConnection.Dispose();
}
}
//7. Return DataSet
return tblMyTable;
}
Ich verwende den obigen Code Datensätze aus der Datenbank zurückzukehren.Wird mein DataTable-Snippet korrekt geschrieben?
Das obige Snippet würde in Web Anwendung laufen, die voraussichtlich um 5000 Besucher täglich haben.
Die zurückgegebenen Datensätze 20.000 oder über erreichen.
Die zurückgegebenen Datensätze werden (schreibgeschützt) in ausgelagertem GridView angezeigt.
Wäre es besser, Datareader verwenden anstelle von Datatable?
HINWEIS: zwei Spalten in der Gridview sind verlinkt.
Der 'Using'-Punkt ist akademisch - er entsorgt Objekte bereits korrekt in einem finally-Block. – Jamiec
@Jamiec: Nein, mit den 'using' Blöcken ist das allgemein akzeptierte Best Practice - mach es, gewöhne dich dran - mach dir nie mehr Gedanken um einen' finally' Block (und nichts Schlimmes passiert, wenn du das jemals vergessen solltest 'Block .....) –
oh ich tue es tatsächlich, es ist nur ich dachte, es war ein merkwürdiger Punkt zu sehen, da er bereits wusste, diese Objekte zu entsorgen. – Jamiec