Подходит ли использование статики для работы с CRUD
У меня есть статический класс DBO, который содержит статический метод GetConnection для установления
соединение, статический метод IUD для вставки, обновления, удаления и статический метод GetTable для извлечения данных.Подходит ли использование статики для Crud, если не то, что я мог бы использовать.
Что я уже пробовал:
public static class DBO { public static SqlConnection GetConnection() { SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnection"].ConnectionString); if (con.State != ConnectionState.Open) { con.Open(); } return con; } public static int IUD(string sql, SqlParameter[] param, CommandType cmdType) { using (SqlConnection con = GetConnection()) { SqlCommand cmd = new SqlCommand(sql, con); cmd.CommandType = cmdType; if (param != null) { cmd.Parameters.AddRange(param); } try { return cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } } } public static DataTable GetTable(string sql, SqlParameter[] param, CommandType cmdType) { using (SqlConnection con = GetConnection()) { using (SqlCommand cmd = new SqlCommand(sql, con)) { cmd.CommandType = cmdType; if (param != null) { cmd.Parameters.AddRange(param); } SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); return dt; } } }
PIEBALDconsult
Нет, то, что вы показываете, слишком негибко и ограничивает. Точно так же используйте ADO.net интерфейсы (например, IDbConnection), а не жестко закодированные конкретные классы (например, SqlConnection).
https://www.codeproject.com/Articles/753789/Simplified-Database-Access-via-ADO-NET-Interfaces
Сказав это, я теперь использую множество методов расширения для вызова ADO.net классы-и они должны быть статическими, так что это действительно зависит от того, как вы используете статические методы.
Я также отмечу, что единственная хорошая вещь (на мой взгляд) в DataAdapters заключается в том, что они будут открывать и закрывать соединение для вас-вам не нужно делать это самостоятельно.
Richard Deeming
catch (Exception ex) { throw ex; }
Не делай этого! Вы только что выбросили трассировку стека исключения.
Если ты действительно хотите повторно выбросить исключение, используйте:
catch (Exception ex) { throw; }
Но, поскольку вы ничего не делаете с этим исключением, вы можете просто удалить
try..catch
блок.
PIEBALDconsult
Некоторые люди могут захотеть выбросить трассировку стека. Я, с другой стороны, предпочитаю включать исходное исключение в качестве внутреннего исключения нового пользовательского исключения.
Я также предпочитаю добавлять CommandText, имена и значения параметров.