Sto cercando di trovare il modo ottimale (veloce e semplice) per accedere al codice SQL Server attraverso il codice in C#.Qual è il miglior aproach per ottenere i dati sql da C#
Come stavo imparando dai libri ho incontrato più suggerimenti di solito dicendomi di farlo tramite trascinamento della selezione. Tuttavia, dal momento che volevo farlo in codice, il primo aproach era quello di ottenere i dati per numero di colonna, ma qualsiasi riordino in SQL Query (come l'aggiunta/rimozione di colonne) è stato per me un problema da risolvere.
Per esempio (non ridete, qualche codice è come 2 anni), ho funzione speciale anche codificato per passare sqlQueryResult e verificare se è null o non):
public static void exampleByColumnNumber(string varValue) {
string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2]
FROM [Database].[dbo].[Table]
WHERE [SomeOtherColumn] = @varValue";
SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);
SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
string var1 = Locale.checkForNullReturnString(sqlQueryResult, 0);
string var2 = Locale.checkForNullReturnString(sqlQueryResult, 1);
}
sqlQueryResult.Close();
}
}
Più tardi ho scoperto è possibile attraverso i nomi delle colonne (che sembra più facile da leggere con più colonne e un sacco di ordine ecc cambiare):
public static void exampleByColumnNames(string varValue) {
string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2]
FROM [Database].[dbo].[Table]
WHERE [SomeOtherColumn] = @varValue";
SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);
SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
string var1 = (string) sqlQueryResult["SomeColumn"];
string var2 = (string) sqlQueryResult["SomeColumn2"];
}
sqlQueryResult.Close();
}
}
e 3 ° esempio è quello di farlo a nomi di colonna, ma utilizzando .ToString() per assicurarsi che sia valore non nullo, o facendo If/else sul controllo null.
public static void exampleByColumnNamesAgain(string varValue) {
string preparedCommand = @"SELECT TOP 1 [SomeColumn],[SomeColumn2], [SomeColumn3]
FROM [Database].[dbo].[Table]
WHERE [SomeOtherColumn] = @varValue";
SqlCommand sqlQuery = new SqlCommand(preparedCommand, Locale.sqlDataConnection);
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varValue) ", varValue);
SqlDataReader sqlQueryResult = sqlQuery.ExecuteReader();
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
string var1 = (string) sqlQueryResult["SomeColumn"].ToString();
DateTime var2;
DateTime.TryParse(sqlQueryResult["SomeColumn2"].ToString());
int varInt = ((int) sqlQueryResult["SomeColumn3"] == null ? 0 : (int) sqlQueryResult["SomeColumn3"];
}
sqlQueryResult.Close();
}
}
Si prega di nudo in mente che ho appena creato questa per amore di questo esempio e ci potrebbero essere alcuni errori di battitura o qualche lieve errore di sintassi, ma la questione principale è quale approccio è migliore, che è la peggiore (so che il primo è quello che non mi piace di più).
Presto dovrò iniziare/riscrivere una parte della mia piccola applicazione da 90k linee che ha almeno questi 3 esempi ampiamente utilizzati, quindi mi piacerebbe ottenere il miglior metodo per la velocità e preferibilmente il più facile da mantenere (si spera che sarà stesso aproach).
Probabilmente ci sono alcune opzioni migliori là fuori, quindi per favore condividere?
hai detto 'optimization' precoce? – mjv
Cosa intendi per ottimizzazione prematura? – MadBoy
In generale significa "non preoccuparti delle prestazioni finché non hai finito". Non sai ancora se l'accesso al database sarà il collo di bottiglia, quindi non preoccuparti delle prestazioni in questo momento. Se scrivi codice facile da leggere, facile da capire e facile da gestire, finirai molto più velocemente e con meno errori. Puoi sempre tornare indietro e ottimizzare per le prestazioni in seguito. –