wiki:blog:абстракция_от_sql_в_c
Абстракция от Sql в C#
Дано: Имеется база данных с табличкой users(столбцы userID, и userName)
Условие: Хочется инструмент который позволял бы быстро делать простейшие действия, но при этом был бы достаточно гибким для действий специфических.
Мое решение:
public static class SqlService { private static string connectionString = "CONNECTION_STRING_HERE"; // это позволит нам быстро создавать соединение public static SqlConnection Connection { get { return new SqlConnection(connectionString); } } // выполняем команду оставляя соединение в исходном состоянии private static void myExecute(this SqlCommand command) { bool connectionOpened = (command.Connection.State == ConnectionState.Open); if (!connectionOpened) { try { command.Connection.Open(); } catch { throw; } } try { command.ExecuteNonQuery(); } catch { throw; } finally { if (!connectionOpened) { command.Connection.Close(); } } } public static void AddUser(Guid userID, string userName, SqlConnection connection = null) { //если соединение не передается в аргументе создаем новое SqlConnection con = connection ?? Connection; SqlCommand com = new SqlCommand("INSERT INTO users(userID, userName)" + " VALUES(@userID, @userName)", con); com.Parameters.Add("@userID", SqlDbType.UniqueIdentifier); com.Parameters.Add("@userName", SqlDbType.NVarChar, 256); com.Parameters["@userID"].Value = userID; com.Parameters["@userName"].Value = userName; try { com.myExecute(); } catch { throw; } } public static void DeleteUser(Guid userID, SqlConnection connection = null) { SqlConnection con = connection ?? Connection; SqlCommand com = new SqlCommand("DELETE FROM users" + " WHERE userID=@userID", con); com.Parameters.Add("@userID", SqlDbType.UniqueIdentifier); com.Parameters["@userID"].Value = userID; try { com.myExecute(); } catch { throw; } } }
Пример использования:
static void Example() { Guid newUserID = Guid.NewGuid(); // простое действие // соединение создалось, открылось и закрылось SqlService.AddUser(newUserID, "MrSmith"); // специфичное действие using (SqlConnection connection = SqlService.Connection) { connection.Open(); //команда выполнилась, соединение осталось открытым SqlService.DeleteUser(newUserID, connection); //выполняем любые действия используя то же соединение SqlCommand specCom = new SqlCommand(specComText, connection); specCom.ExecuteNonQuery(); } }
original url: http://blog.c0f3.net/2013/08/sql-db-c.html
wiki/blog/абстракция_от_sql_в_c.txt · Last modified: 2019/01/05 12:32 by kpc