한 걸음 한 걸음 ASP.NET MVC 5 프로그램 만 들 기[Repository+Autofac+Automapper+SqlSugar](2)

선언:
이 시리즈 의 첫 번 째 편 인 에서 저 는 공백 해결 방안 을 구축 하고 이 해결 방안 에서 디 렉 터 리 를 만 들 고 대응 하 는 프로젝트 를 소개 합 니 다.이 편 은 프로젝트 에서 Nuget 을 사용 하여.NET 에 대응 하 는 MySql.Data 패 키 지 를 도입 하고 전통 적 인 Ado.NET 을 사용 하여 MySQL 데이터 베 이 스 를 연결 하여 간단 한 조 회 를 실현 하고 데 이 터 를 범용 대상 으로 변환 하 는 작업 을 여러분 과 함께 배 울 것 입 니 다.
본 편 지식 요점
  • Nuget 패키지 관리 도구;
  • MySQL Helper 도움말 라 이브 러 리;
  • Ado.NET
  • 일반
  • 실체 및 도구 클래스 만 들 기
  • TsBlog.Domain 프로젝트 에 새 폴 더 를 만 듭 니 다.이름 은 Entities 이 고 이 폴 더 에 실체 클래스 를 추가 합 니 다.이름 은 Post.cs 입 니 다.Post.cs 파일 을 열 고 다음 속성/구성원 을 만 듭 니 다.
  • using System;
    
    namespace TsBlog.Domain.Entities
    {
        /// 
        ///      
        /// 
        public class Post
        {
            /// 
            /// ID
            /// 
            public int Id { get; set; }
            /// 
            ///   
            /// 
            public string Title { get; set; }
            /// 
            ///   
            /// 
            public string Content { get; set; }
            /// 
            ///   ID
            /// 
            public string AuthorId { get; set; }
            /// 
            ///     
            /// 
            public string AuthorName { get; set; }
            /// 
            ///     
            /// 
            public DateTime CreatedAt { get; set; }
            /// 
            ///     
            /// 
            public DateTime PublishedAt { get; set; }
            /// 
            ///        
            /// 
            public bool IsDeleted { get; set; }
            /// 
            ///       
            /// 
            public bool AllowShow { get; set; }
            /// 
            ///    
            /// 
            public int ViewCount { get; set; }
        }
    }

    그림:
  • 프로젝트 TsBlog.Repositories 에 새로운 종 류 를 만 듭 니 다.이름 은 MySqlHelper.cs 입 니 다.이 종 류 는.NET 대 MySQL 데이터 베 이 스 를 패키지 하 는 바 텀 작업 으로 MySqlHelper.cs 파일 에 다음 과 같은 코드 를 추가 합 니 다.
  • using MySql.Data.MySqlClient;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace TsBlog.Repositories
    {
        /// 
        ///          
        /// 
        public sealed class MySqlHelper
        {
            //        (web.config   ),      connectionString      .    
            public static string connectionString = "     ";
    
            private MySqlHelper()
            {
            }
    
            #region     
            /// 
            ///      
            /// 
            /// 
            /// 
            /// 
            public static int GetMaxID(string FieldName, string TableName)
            {
                string strsql = "select max(" + FieldName + ")+1 from " + TableName;
                object obj = GetSingle(strsql);
                if (obj == null)
                {
                    return 1;
                }
                else
                {
                    return int.Parse(obj.ToString());
                }
            }
            /// 
            ///     
            /// 
            /// 
            /// 
            public static bool Exists(string strSql)
            {
                object obj = GetSingle(strSql);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    cmdresult = 0;
                }
                else
                {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            /// 
            ///     (  MySqlParameter)
            /// 
            /// 
            /// 
            /// 
            public static bool Exists(string strSql, params MySqlParameter[] cmdParms)
            {
                object obj = GetSingle(strSql, cmdParms);
                int cmdresult;
                if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                {
                    cmdresult = 0;
                }
                else
                {
                    cmdresult = int.Parse(obj.ToString());
                }
                if (cmdresult == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            #endregion
    
            #region      SQL  
    
            /// 
            ///   SQL  ,        
            /// 
            /// SQL  
            ///       
            public static int ExecuteSql(string SQLString)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            int rows = cmd.ExecuteNonQuery();
                            return rows;
                        }
                        catch (MySql.Data.MySqlClient.MySqlException e)
                        {
                            connection.Close();
                            throw e;
                        }
                    }
                }
            }
    
            public static int ExecuteSqlByTime(string SQLString, int Times)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            cmd.CommandTimeout = Times;
                            int rows = cmd.ExecuteNonQuery();
                            return rows;
                        }
                        catch (MySql.Data.MySqlClient.MySqlException e)
                        {
                            connection.Close();
                            throw e;
                        }
                    }
                }
            }
    
            /// 
            ///     SQL  ,       。
            /// 
            ///   SQL      
            public static int ExecuteSqlTran(List SQLStringList)
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand();
                    cmd.Connection = conn;
                    MySqlTransaction tx = conn.BeginTransaction();
                    cmd.Transaction = tx;
                    try
                    {
                        int count = 0;
                        for (int n = 0; n < SQLStringList.Count; n++)
                        {
                            string strsql = SQLStringList[n];
                            if (strsql.Trim().Length > 1)
                            {
                                cmd.CommandText = strsql;
                                count += cmd.ExecuteNonQuery();
                            }
                        }
                        tx.Commit();
                        return count;
                    }
                    catch
                    {
                        tx.Rollback();
                        return 0;
                    }
                }
            }
            /// 
            ///              SQL  。
            /// 
            /// SQL  
            ///     ,              ,     ,          
            ///       
            public static int ExecuteSql(string SQLString, string content)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    MySqlCommand cmd = new MySqlCommand(SQLString, connection);
                    MySql.Data.MySqlClient.MySqlParameter myParameter = new MySql.Data.MySqlClient.MySqlParameter("@content", SqlDbType.NText);
                    myParameter.Value = content;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        int rows = cmd.ExecuteNonQuery();
                        return rows;
                    }
                    catch (MySql.Data.MySqlClient.MySqlException e)
                    {
                        throw e;
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
            /// 
            ///              SQL  。
            /// 
            /// SQL  
            ///     ,              ,     ,          
            ///       
            public static object ExecuteSqlGet(string SQLString, string content)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    MySqlCommand cmd = new MySqlCommand(SQLString, connection);
                    MySql.Data.MySqlClient.MySqlParameter myParameter = new MySql.Data.MySqlClient.MySqlParameter("@content", SqlDbType.NText);
                    myParameter.Value = content;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        object obj = cmd.ExecuteScalar();
                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                        {
                            return null;
                        }
                        else
                        {
                            return obj;
                        }
                    }
                    catch (MySql.Data.MySqlClient.MySqlException e)
                    {
                        throw e;
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
            /// 
            ///               (             )
            /// 
            /// SQL  
            ///     ,         image   
            ///       
            public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    MySqlCommand cmd = new MySqlCommand(strSQL, connection);
                    MySql.Data.MySqlClient.MySqlParameter myParameter = new MySql.Data.MySqlClient.MySqlParameter("@fs", SqlDbType.Image);
                    myParameter.Value = fs;
                    cmd.Parameters.Add(myParameter);
                    try
                    {
                        connection.Open();
                        int rows = cmd.ExecuteNonQuery();
                        return rows;
                    }
                    catch (MySql.Data.MySqlClient.MySqlException e)
                    {
                        throw e;
                    }
                    finally
                    {
                        cmd.Dispose();
                        connection.Close();
                    }
                }
            }
    
            /// 
            ///             ,      (object)。
            /// 
            ///         
            ///     (object)
            public static object GetSingle(string SQLString)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            object obj = cmd.ExecuteScalar();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                            {
                                return null;
                            }
                            else
                            {
                                return obj;
                            }
                        }
                        catch (MySql.Data.MySqlClient.MySqlException e)
                        {
                            connection.Close();
                            throw e;
                        }
                    }
                }
            }
            public static object GetSingle(string SQLString, int Times)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            cmd.CommandTimeout = Times;
                            object obj = cmd.ExecuteScalar();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                            {
                                return null;
                            }
                            else
                            {
                                return obj;
                            }
                        }
                        catch (MySql.Data.MySqlClient.MySqlException e)
                        {
                            connection.Close();
                            throw e;
                        }
                    }
                }
            }
            /// 
            ///       ,  MySqlDataReader (   :      ,    MySqlDataReader  Close )
            /// 
            ///     
            /// MySqlDataReader
            public static MySqlDataReader ExecuteReader(string strSQL)
            {
                MySqlConnection connection = new MySqlConnection(connectionString);
                MySqlCommand cmd = new MySqlCommand(strSQL, connection);
                try
                {
                    connection.Open();
                    MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    return myReader;
                }
                catch (MySql.Data.MySqlClient.MySqlException e)
                {
                    throw e;
                }
    
            }
            /// 
            ///       ,  DataSet
            /// 
            ///     
            /// DataSet
            public static DataSet Query(string SQLString)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        connection.Open();
                        MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
                        command.Fill(ds, "ds");
                    }
                    catch (MySql.Data.MySqlClient.MySqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    return ds;
                }
            }
            public static DataSet Query(string SQLString, int Times)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        connection.Open();
                        MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
                        command.SelectCommand.CommandTimeout = Times;
                        command.Fill(ds, "ds");
                    }
                    catch (MySql.Data.MySqlClient.MySqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    return ds;
                }
            }
    
    
    
            #endregion
    
            #region       SQL  
    
            /// 
            ///   SQL  ,        
            /// 
            /// SQL  
            ///       
            public static int ExecuteSql(string SQLString, params MySqlParameter[] cmdParms)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand cmd = new MySqlCommand())
                    {
                        try
                        {
                            PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                            int rows = cmd.ExecuteNonQuery();
                            cmd.Parameters.Clear();
                            return rows;
                        }
                        catch (MySql.Data.MySqlClient.MySqlException e)
                        {
                            throw e;
                        }
                    }
                }
            }
    
    
            /// 
            ///     SQL  ,       。
            /// 
            /// SQL      (key sql  ,value     MySqlParameter[])
            public static void ExecuteSqlTran(Hashtable SQLStringList)
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    using (MySqlTransaction trans = conn.BeginTransaction())
                    {
                        MySqlCommand cmd = new MySqlCommand();
                        try
                        {
                            //  
                            foreach (DictionaryEntry myDE in SQLStringList)
                            {
                                string cmdText = myDE.Key.ToString();
                                MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value;
                                PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                                int val = cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
            /// 
            ///     SQL  ,       。
            /// 
            /// SQL      (key sql  ,value     MySqlParameter[])
            public static int ExecuteSqlTran(System.Collections.Generic.List cmdList)
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    using (MySqlTransaction trans = conn.BeginTransaction())
                    {
                        MySqlCommand cmd = new MySqlCommand();
                        try
                        {
                            int count = 0;
                            //  
                            foreach (CommandInfo myDE in cmdList)
                            {
                                string cmdText = myDE.CommandText;
                                MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Parameters;
                                PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
    
                                if (myDE.EffentNextType == EffentNextType.WhenHaveContine || myDE.EffentNextType == EffentNextType.WhenNoHaveContine)
                                {
                                    if (myDE.CommandText.ToLower().IndexOf("count(") == -1)
                                    {
                                        trans.Rollback();
                                        return 0;
                                    }
    
                                    object obj = cmd.ExecuteScalar();
                                    bool isHave = false;
                                    if (obj == null && obj == DBNull.Value)
                                    {
                                        isHave = false;
                                    }
                                    isHave = Convert.ToInt32(obj) > 0;
    
                                    if (myDE.EffentNextType == EffentNextType.WhenHaveContine && !isHave)
                                    {
                                        trans.Rollback();
                                        return 0;
                                    }
                                    if (myDE.EffentNextType == EffentNextType.WhenNoHaveContine && isHave)
                                    {
                                        trans.Rollback();
                                        return 0;
                                    }
                                    continue;
                                }
                                int val = cmd.ExecuteNonQuery();
                                count += val;
                                if (myDE.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0)
                                {
                                    trans.Rollback();
                                    return 0;
                                }
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                            return count;
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
            /// 
            ///     SQL  ,       。
            /// 
            /// SQL      (key sql  ,value     MySqlParameter[])
            public static void ExecuteSqlTranWithIndentity(System.Collections.Generic.List SQLStringList)
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    using (MySqlTransaction trans = conn.BeginTransaction())
                    {
                        MySqlCommand cmd = new MySqlCommand();
                        try
                        {
                            int indentity = 0;
                            //  
                            foreach (CommandInfo myDE in SQLStringList)
                            {
                                string cmdText = myDE.CommandText;
                                MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Parameters;
                                foreach (MySqlParameter q in cmdParms)
                                {
                                    if (q.Direction == ParameterDirection.InputOutput)
                                    {
                                        q.Value = indentity;
                                    }
                                }
                                PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                                int val = cmd.ExecuteNonQuery();
                                foreach (MySqlParameter q in cmdParms)
                                {
                                    if (q.Direction == ParameterDirection.Output)
                                    {
                                        indentity = Convert.ToInt32(q.Value);
                                    }
                                }
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
            /// 
            ///     SQL  ,       。
            /// 
            /// SQL      (key sql  ,value     MySqlParameter[])
            public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
            {
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    using (MySqlTransaction trans = conn.BeginTransaction())
                    {
                        MySqlCommand cmd = new MySqlCommand();
                        try
                        {
                            int indentity = 0;
                            //  
                            foreach (DictionaryEntry myDE in SQLStringList)
                            {
                                string cmdText = myDE.Key.ToString();
                                MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value;
                                foreach (MySqlParameter q in cmdParms)
                                {
                                    if (q.Direction == ParameterDirection.InputOutput)
                                    {
                                        q.Value = indentity;
                                    }
                                }
                                PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                                int val = cmd.ExecuteNonQuery();
                                foreach (MySqlParameter q in cmdParms)
                                {
                                    if (q.Direction == ParameterDirection.Output)
                                    {
                                        indentity = Convert.ToInt32(q.Value);
                                    }
                                }
                                cmd.Parameters.Clear();
                            }
                            trans.Commit();
                        }
                        catch
                        {
                            trans.Rollback();
                            throw;
                        }
                    }
                }
            }
            /// 
            ///             ,      (object)。
            /// 
            ///         
            ///     (object)
            public static object GetSingle(string SQLString, params MySqlParameter[] cmdParms)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand cmd = new MySqlCommand())
                    {
                        try
                        {
                            PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                            object obj = cmd.ExecuteScalar();
                            cmd.Parameters.Clear();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                            {
                                return null;
                            }
                            else
                            {
                                return obj;
                            }
                        }
                        catch (MySql.Data.MySqlClient.MySqlException e)
                        {
                            throw e;
                        }
                    }
                }
            }
    
            /// 
            ///       ,  MySqlDataReader (   :      ,    MySqlDataReader  Close )
            /// 
            ///     
            /// MySqlDataReader
            public static MySqlDataReader ExecuteReader(string SQLString, params MySqlParameter[] cmdParms)
            {
                MySqlConnection connection = new MySqlConnection(connectionString);
                MySqlCommand cmd = new MySqlCommand();
                try
                {
                    PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                    MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return myReader;
                }
                catch (MySql.Data.MySqlClient.MySqlException e)
                {
                    throw e;
                }
                //      finally
                //      {
                //        cmd.Dispose();
                //        connection.Close();
                //      }  
    
            }
    
            /// 
            ///       ,  DataSet
            /// 
            ///     
            /// DataSet
            public static DataSet Query(string SQLString, params MySqlParameter[] cmdParms)
            {
                using (MySqlConnection connection = new MySqlConnection(connectionString))
                {
                    MySqlCommand cmd = new MySqlCommand();
                    PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                    using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                    {
                        DataSet ds = new DataSet();
                        try
                        {
                            da.Fill(ds, "ds");
                            cmd.Parameters.Clear();
                        }
                        catch (MySql.Data.MySqlClient.MySqlException ex)
                        {
                            throw new Exception(ex.Message);
                        }
                        return ds;
                    }
                }
            }
    
    
            private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
            {
                if (conn.State != ConnectionState.Open)
                    conn.Open();
                cmd.Connection = conn;
                cmd.CommandText = cmdText;
                if (trans != null)
                    cmd.Transaction = trans;
                cmd.CommandType = CommandType.Text;//cmdType;
                if (cmdParms != null)
                {
    
    
                    foreach (MySqlParameter parameter in cmdParms)
                    {
                        if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                            (parameter.Value == null))
                        {
                            parameter.Value = DBNull.Value;
                        }
                        cmd.Parameters.Add(parameter);
                    }
                }
            }
    
            #endregion
        }
        public enum EffentNextType
        {
            /// 
            ///            
            /// 
            None,
            /// 
            ///        "select count(1) from .."  ,         ,       
            /// 
            WhenHaveContine,
            /// 
            ///        "select count(1) from .."  ,          ,      
            /// 
            WhenNoHaveContine,
            /// 
            ///               0,      
            /// 
            ExcuteEffectRows,
            /// 
            ///     -       "select count(1) from .."  ,          ,      
            /// 
            SolicitationEvent
        }
        public class CommandInfo
        {
            public object ShareObject = null;
            public object OriginalData = null;
            event EventHandler _solicitationEvent;
            public event EventHandler SolicitationEvent
            {
                add
                {
                    _solicitationEvent += value;
                }
                remove
                {
                    _solicitationEvent -= value;
                }
            }
            public void OnSolicitationEvent()
            {
                if (_solicitationEvent != null)
                {
                    _solicitationEvent(this, new EventArgs());
                }
            }
            public string CommandText;
            public System.Data.Common.DbParameter[] Parameters;
            public EffentNextType EffentNextType = EffentNextType.None;
            public CommandInfo()
            {
    
            }
            public CommandInfo(string sqlText, SqlParameter[] para)
            {
                this.CommandText = sqlText;
                this.Parameters = para;
            }
            public CommandInfo(string sqlText, SqlParameter[] para, EffentNextType type)
            {
                this.CommandText = sqlText;
                this.Parameters = para;
                this.EffentNextType = type;
            }
        }
    }

    코드 를 추가 하면 Visual Studio 편집기 에서 다음 그림 과 같은 오 류 를 알려 줍 니 다.그림:
    프로젝트 에 MySql.Data 라 는 패키지 가 도입 되 지 않 았 음 을 설명 합 니 다.이 프로젝트 의 인용[References]에서 오른쪽 단 추 를 누 르 고[Manage Nuget Packages]를 선택 하여 프로젝트 의 Nuget 패키지 관리 인터페이스 에 들 어가 MySql.Data 를 검색 하고 찾 은 결과 에서 MySql.Data 를 선택 합 니 다.동시에 버 전 을 선택 하 십시오(이 시 리 즈 는 MySql.Data 6.9.9 를 사용 합 니 다)."Install"을 누 르 면 설치 합 니 다.완 료 된 후에 저 희 는 MySqlHelper.cs 파일 로 돌아 가 MySql.Data.MySqlClient 의 네 임 스페이스 를 도입 합 니 다.
    using MySql.Data.MySqlClient;

    이로써 MySqlHelper.cs 라 는 MySql 도움말 라 이브 러 리 가 만 들 어 졌 습 니 다.그러나 본 논문 의 후속 적 인 데이터 변환 을 위해 저 희 는 이 프로젝트 에서 새로운 클래스 파일 을 만 듭 니 다.이름 은 DataConverter.cs 입 니 다.이 를 정적 클래스 로 쓰 고 DataTable 에서 일반 대상 으로 전환 하 는 정적 확장 방법 을 만 듭 니 다.다음 코드 를 작성 합 니 다.
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Reflection;
    
    namespace TsBlog.Repositories
    {
        public static class DataConverter
        {
            public static List ToList(this DataTable table) where T : class, new()
            {
                var obj = new T();
                var tType = obj.GetType();
                var list = new List();
                //Define what attributes to be read from the class
                const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;
    
                //Read Attribute Names and Types
                var objFieldNames = typeof(T).GetProperties(flags)
                    .Select(item => new
                    {
                        item.Name,
                        Type = Nullable.GetUnderlyingType(item.PropertyType) ?? item.PropertyType
                    }).ToList();
    
                //Read Datatable column names and types
                var dtlFieldNames = table.Columns.Cast()
                    .Select(item => new
                    {
                        Name = item.ColumnName,
                        Type = item.DataType
                    }).ToList();
    
                foreach (var row in table.Rows.Cast())
                {
                    foreach (var prop in objFieldNames)
                    {
                        if (!dtlFieldNames.Any(x => x.Name.Equals(prop.Name, StringComparison.CurrentCultureIgnoreCase)))
                        {
                            continue;
                        }
                        var propertyInfo = tType.GetProperty(prop.Name);
                        var rowValue = row[prop.Name];
                        if (propertyInfo == null) continue;
                        var t = Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType;
    
                        var safeValue = (rowValue == null || DBNull.Value.Equals(rowValue)) ? null : Convert.ChangeType(rowValue, t);
                        propertyInfo.SetValue(obj, safeValue, null);
                    }
                    list.Add(obj);
                }
                return list;
            }
        }
    }
    

    여기 서 우리 의 준비 작업 이 거의 끝나 지 않 았 습 니 다.다음 에 데 이 터 를 만들어 서 관련 작업 을 읽 습 니 다.
    저장 소 클래스 만 들 기
    프로젝트[TsBlog.Repositories]에 새로운 종류의 파일 을 추가 합 니 다.이름 은 PostRepository.cs 입 니 다.우 리 는 이 파일 에서 박문 에 관 한 데이터 베 이 스 를 읽 고 쓰 는 등 작업 을 합 니 다.(주:처음에 우 리 는 Ado.net 방식 으로 데이터 베 이 스 를 작 동 했 고 ORM 은 후속 문장 에서 프로젝트 의 재 구성 과 최적화 를 점차적으로 참조 하고 완성 할 것 입 니 다)코드 는 다음 과 같 습 니 다.
    PostRepository.cs
    using MySql.Data.MySqlClient;
    using System.Collections.Generic;
    using System.Linq;
    using TsBlog.Domain.Entities;
    
    namespace TsBlog.Repositories
    {
        /// 
        /// POST        
        /// 
        public class PostRepository
        {
    
            /// 
            ///   ID  
            /// 
            /// Post ID
            /// 
            public Post FindById(int id)
            {
                var ds = MySqlHelper.Query("SELECT * FROM tb_post WHERE Id=@Id", new MySqlParameter("@Id",id));
                var entity = ds.Tables[0].ToList().FirstOrDefault();
                return entity;
            }
    
            /// 
            ///       
            /// 
            /// 
            public List FindAll()
            {
                var ds = MySqlHelper.Query("SELECT * FROM tb_post");
                return ds.Tables[0].ToList();
            }
        }
    }

    완벽 한 보기 층
    컨트롤 러 수정
    우선,우 리 는 프로젝트[TsBlog.Frontend]에 들 어가 컨트롤 러[HomeController.cs]를 열 고 데이터 읽 기 기능 을 테스트 하기 위해 Action 을 추가 합 니 다.이름 은 Post,수 정 된 HomeController.cs 파일 코드 는 다음 과 같 습 니 다.
    HomeController.cs
    using System.Web.Mvc;
    using TsBlog.Repositories;
    
    namespace TsBlog.Frontend.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
    
            public ActionResult Post()
            {
                var postRepository = new PostRepository();
                var post = postRepository.FindById(1);
                return View(post);
            }
        }
    }

    메모:TsBlog.domain 과 TsBlog.Repositories 두 프로그램 집합 참조
    보기 만 들 기
    보기 에 대응 하 는 보기 Post.cshtml 파일 을 추가 합 니 다.
    @model TsBlog.Domain.Entities.Post
    @{
        Layout = null;
    }
    
    
    
    
    
        
        Post find by id test
    
    
    

    Post id:@Model.Id

    Post Title:@Model.Title


    데이터베이스 연결
    웹.coinfig 파일 에 대응 하 는 데이터베이스 연결 문자열 을 추가 합 니 다:
    
        
        

    그림:
    프로젝트[TsBlog.Repositories]의 MySqlHelper.cs 파일 의 데이터베이스 연결 설정 수정:
    public static string ConnectionString = ConfigurationManager.ConnectionStrings["TsBlogMySQLDb"].ConnectionString;

    데이터베이스 와 테이블 만 들 기
    MySql 관리 도 구 를 열 고 다음 Sql 스 크 립 트 를 실행 하고 데이터베이스,데이터 시트 를 만 들 고 테스트 데 이 터 를 가 져 옵 니 다.
    CREATE DATABASE IF NOT EXISTS `tsblog`
    
    USE `tsblog`;
    
    /*Table structure for table `tb_post` */
    
    DROP TABLE IF EXISTS `tb_post`;
    
    CREATE TABLE `tb_post` (
      `Id` int(12) NOT NULL AUTO_INCREMENT,
      `Title` varchar(255) DEFAULT '' COMMENT '  ',
      `Content` text COMMENT '  ',
      `AuthorId` int(6) DEFAULT '0' COMMENT '  ID',
      `AuthorName` varchar(50) DEFAULT '' COMMENT '    ',
      `CreatedAt` datetime DEFAULT NULL COMMENT '    ',
      `PublishedAt` datetime DEFAULT NULL COMMENT '    ',
      `IsDeleted` bit(1) DEFAULT b'0' COMMENT '       [0: ,1: ],   :0',
      `AllowShow` bit(1) DEFAULT b'1' COMMENT '      [0: ,1: ],   :1',
      `ViewCount` int(10) DEFAULT '0' COMMENT '   ',
      PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    /*Data for the table `tb_post` */
    
    insert  into `tb_post`(`Id`,`Title`,`Content`,`AuthorId`,`AuthorName`,`CreatedAt`,`PublishedAt`,`IsDeleted`,`AllowShow`,`ViewCount`) values 
    (1,'Title','Clean content',0,'',NULL,NULL,'\0','1',0);
    

    여기까지 설정 이 완 료 된 것 같 습 니 다.프로젝트[TsBlog.Frontend]를 시작 항목 으로 설정 하고 F5 를 누 르 면 다음 과 같은 오 류 를 얻 을 수 있 습 니 다.
    jquery 를 포함 하여 이전 편 에서 불필요 한 프로그램 패 키 지 를 제거 하 였 으 나,ASP.NET MVC 5 는 자동 으로 압축 기능 을 열 어 주 었 기 때문에 오 류 를 보고 하 였 습 니 다.먼저 압축 기능 을 잠시 끄 고 Global.sax 를 엽 니 다.우리 가 본 파일 코드 는:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    
    namespace TsBlog.Frontend
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
        }
    }

    압축 설정 문 설명:
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace TsBlog.Frontend
    {
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                //BundleConfig.RegisterBundles(BundleTable.Bundles);
            }
        }
    }

    자,F5 실행 프로그램 을 누 르 고 주 소 를 엽 니 다.http://localhost:54739/home/post,그림 과 같은 인터페이스 를 얻 으 면:
    그럼 Ado.net 기반 MySql 데이터 연결 이 성 공 했 습 니 다.
    이 글 을 단숨에 쓰 니 정말 길 구나.옆 에 있 는 스크롤 바 가 가 늘 어서 작은 허리 가 되 었 구나.하하...................................................
    만약 당신 이 본문 을 좋아한다 면,작가 가 후속 적 으로 더 잘 쓸 수 있 도록 좋아요 를 눌 러 주세요!!문제 가 있 으 면 댓 글 피드백 을 환영 합 니 다.
    본 고 는 코드 친구 망 에 동시에 발표 되 었 다.(2)

    좋은 웹페이지 즐겨찾기