User Tools

Site Tools


wiki:blog:абстракция_от_sql_в_c

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

wiki:blog:абстракция_от_sql_в_c [2019/01/05 12:32] (current)
kpc created
Line 1: Line 1:
 +====== Абстракция от Sql в C# ======
  
 +Дано:
 +Имеется база данных с табличкой users(столбцы userID, и userName)
 +
 +Условие:​
 +Хочется инструмент который позволял бы быстро делать простейшие действия,​ но при этом был бы достаточно гибким для действий специфических.
 +
 +Мое решение:​
 +
 +<code c#>
 +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; }
 +    }
 +}
 +</​code>​
 +Пример использования:​
 +<code c#>
 +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();​
 +    }
 +}
 +</​code>​
 +
 +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