Я пытаюсь найти оптимальный (быстрый и самый простой) способ доступа к коду SQL Server через код в c #.
Когда я учился по книгам, я столкнулся с несколькими предложениями, которые обычно подсказывали мне сделать это с помощью перетаскивания. Однако, поскольку я хотел сделать это в коде, первым делом было получить данные по номерам столбцов, но любое изменение порядка в SQL-запросах (например, добавление / удаление столбцов) было проблематично для меня.
Например (не смейтесь, некоторому коду около 2 лет), я даже написал специальную функцию для передачи sqlQueryResult и проверки, является ли он нулевым или нет):
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();
}
}
Позже я узнал, что это возможно через имена столбцов (которые, кажется, легче читать с несколькими столбцами и множеством изменяющихся порядков и т. Д.):
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();
}
}
И третий пример - это сделать это по именам столбцов, но с помощью .ToString (), чтобы убедиться, что это не нулевое значение, или выполнить If / else для проверки на ноль.
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();
}
}
Пожалуйста, помните, что я только что создал это ради этого примера, и могут быть некоторые опечатки или небольшая синтаксическая ошибка, но главный вопрос в том, какой подход лучше, а какой хуже (я знаю первый это тот, который мне не нравится больше всего).
Вскоре мне придется начать / переписать некоторую часть моего маленького 90-килобайтового приложения, в котором, по крайней мере, эти 3 примера широко используются, поэтому я хотел бы получить лучший метод для скорости и, желательно, самый простой в обслуживании (надеюсь, он будет таким же Подход).
Возможно, есть и лучшие варианты, поэтому, пожалуйста, поделитесь?