User Tools

Site Tools


wiki:blog:абстракция_от_sql_в_c
no way to compare when less than two revisions

Differences

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


wiki:blog:абстракция_от_sql_в_c [2019/01/05 12:32] (current) – created kpc
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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki