C#中mysql增删改查等操作

定义操作类

class DataBase
    {
        INIFileHelper inifilehelper = new INIFileHelper("./set.ini");
        ...
        ...
    }

属性

#region 属性

        private bool m_Usefull = true;
        /// <summary>
        /// 是否可用
        /// </summary>
        public bool Usefull
        {
            get { return m_Usefull; }
        }

        private MySqlConnection m_Conn = null;
        /// <summary>
        /// 数据库连接
        /// </summary>
        public MySqlConnection Conn
        {
            get { return m_Conn; }
        }

        private MySqlCommand m_Cmd = null;
        public MySqlCommand Cmd
        {
            get { return m_Cmd; }
        }

        private string m_ServerIP = null;
        /// <summary>
        /// 主用服务器IP地址
        /// </summary>
        public string ServerIP
        {
            get { return m_ServerIP; }
            set
            {
                bool isIPUseful = CommonUse.CheckIP(value);
                if (isIPUseful)
                {
                    inifilehelper.IniWriteValue("DataBase", "Server1", value);
                    m_ServerIP = value;
                }
                else
                {
                    XtraMessageBox.Show("IP地址格式不正确", "软件提示");
                    m_ServerIP = null;
                }
            }
        }

        private string m_SlaveIP = null;
        /// <summary>
        /// 备用服务器IP地址
        /// </summary>
        public string SlaveIP
        {
            get { return m_SlaveIP; }
            set
            {
                bool isIPUseful = CommonUse.CheckIP(value);
                if (isIPUseful)
                {
                    inifilehelper.IniWriteValue("DataBase", "Server2", value);
                    m_SlaveIP = value;
                }
                else
                {
                    XtraMessageBox.Show("IP地址格式不正确", "软件提示");
                    m_SlaveIP = null;
                }
            }
        }

        private string m_Status = null;
        /// <summary>
        /// 记录当前连接状态,使用主用或备用服务器
        /// </summary>
        public string Status
        {
            get { return m_Status; }
        }

        private string m_UserId = null;
        /// <summary>
        /// 用户名
        /// </summary>
        public string UserId
        {
            get { return m_UserId; }
        }

        private string m_Pwd = null;
        /// <summary>
        /// 密码
        /// </summary>
        public string Pwd
        {
            get { return m_Pwd; }
        }

        private string m_DataBaseName = null;
        /// <summary>
        /// 数据库名称
        /// </summary>
        public string DataBaseName
        {
            get { return m_DataBaseName; }
        }

        private string m_MySQLPath = null;
        /// <summary>
        /// mySQL安装路径
        /// </summary>
        public string MySQLPath
        {
            get { return m_MySQLPath; }
            set
            {
                inifilehelper.IniWriteValue("DataBase", "MySQLPath", value);
                m_MySQLPath = value;
            }
        }

        private string m_MyINIPath = null;
        /// <summary>
        /// my.ini路径
        /// </summary>
        public string MyINIPath
        {
            get
            {
                return m_MyINIPath;
            }
        }

        #endregion

构造函数

public DataBase()
        {
            //获取主用服务器IP
            m_ServerIP = inifilehelper.IniReadValue("DataBase", "Server1");
            //获取备用服务器IP
            m_SlaveIP = inifilehelper.IniReadValue("DataBase", "Server2");
            //获取登录用户
            m_UserId = inifilehelper.IniReadValue("DataBase", "UserID");
            //获取登录密码
            m_Pwd = inifilehelper.IniReadValue("DataBase", "Pwd");
            //获取数据库名称
            m_DataBaseName = inifilehelper.IniReadValue("DataBase", "DataBaseName");
            //获取MySQL路径
            m_MySQLPath = inifilehelper.IniReadValue("DataBase", "MySQLPath");
            //my.ini文件路径
            m_MyINIPath = GetMyIniPath();

            if (!string.IsNullOrEmpty(m_MyINIPath))
            {
                iniFilehelperOfmy = new INIFileHelper(m_MyINIPath);
            }

            if (CommonUse.TestNetConnectity(m_ServerIP))
            {
                //数据库连接字符串
                //Allow User Variables=true为SQL语句参数支持
                string strConn1 = string.Format("Server = '{0}';Database = '{1}' ;User id= '{2}' ; PWD = '{3}';Allow User Variables=True;",
                    m_ServerIP, m_DataBaseName, m_UserId, m_Pwd);
                try
                {
                    m_Conn = new MySqlConnection(strConn1);//产生数据库连接
                    m_Cmd = new MySqlCommand();//实例化SqlCommand
                    m_Cmd.Connection = m_Conn;//设置SqlCommand的Connection属性

                    m_Status = "正在使用主用服务器...";
                }
                catch (Exception)
                {
                    MessageBox.Show("请检查参数设置!", "软件提示");
                    m_Usefull = false;
                }
            }
            else if (CommonUse.TestNetConnectity(m_SlaveIP))
            {
                //MessageBox.Show("请检查与主机的网络连接!", "软件提示");
                //连接备用主机
                try
                {
                    string strConn2 = string.Format("Server = '{0}';Database = '{1}' ;User id= '{2}' ; PWD = '{3}';Allow User Variables=True;",
                m_SlaveIP, m_DataBaseName, m_UserId, m_Pwd);

                    m_Conn = new MySqlConnection(strConn2);//产生数据库连接
                    m_Cmd = new MySqlCommand();//实例化SqlCommand
                    m_Cmd.Connection = m_Conn;//设置SqlCommand的Connection属性

                    m_Status = "正在使用备用服务器...";
                }
                catch (Exception)
                {
                    MessageBox.Show("请检查参数设置!", "软件提示");
                    m_Usefull = false;
                }
            }
            else
            {
                m_Status = "与服务器连接失败...";

                m_Usefull = false;
            }
        }

通过Transact-SQL语句提交数据

public int ExecDataBySql(string strSql)
        {
            int intReturnValue = -1;//返回受影响的行数

            m_Cmd.CommandType = CommandType.Text;
            m_Cmd.CommandText = strSql;

            try
            {
                if (m_Conn.State == ConnectionState.Closed) m_Conn.Open();

                intReturnValue = m_Cmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "软件提示");
                //throw e;
            }
            finally
            {
                m_Conn.Close();//连接关闭,但不释放掉该对象所占的内存单元
            }

            return intReturnValue;
        }

通过事务执行多条Transact-SQL语句提交数据

public bool ExecDataBySqls(List<string> strSqls)
        {
            bool booIsSucceed;//定义返回值变量

            if (m_Conn.State == ConnectionState.Closed)//判断当前的数据库连接状态
            {
                try
                {
                    m_Conn.Open();//打开连接
                }
                catch (Exception)
                {
                    MessageBox.Show("请检查网络连接和参数设置!", "软件提示");

                    return false;
                }
            }

            MySqlTransaction sqlTran = m_Conn.BeginTransaction();//开始数据库事务

            try
            {
                m_Cmd.Transaction = sqlTran;//设置m_Cmd的事务属性
                //循环取出封装在列表strSqls中表示SQL语句的字符串
                foreach (string item in strSqls)
                {
                    m_Cmd.CommandType = CommandType.Text;//设置命令类型为SQL文本命令
                    m_Cmd.CommandText = item;//设置要对数据源执行的SQL语句
                    m_Cmd.ExecuteNonQuery();//执行SQL语句并返回受影响的行数
                }

                sqlTran.Commit();//提交事务,持久化数据
                booIsSucceed = true;  //表示提交数据库成功
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "软件提示");

                sqlTran.Rollback();//回滚事务,恢复数据
                booIsSucceed = false;  //表示提交数据库失败!
            }
            finally
            {
                m_Conn.Close();//关闭连接
                strSqls.Clear();//清除列表strSqls中的元素
            }

            return booIsSucceed;
        }

写入数据,数据库中有该记录时则更新,没有时则插入

        /// <summary>
        /// 写入数据,数据库中有该记录时则更新,没有时则插入
        /// </summary>
        /// <param name="strTable">表名</param>
        /// <param name="keyName">主键列名</param>
        /// <param name="keyValue">主键值</param>
        /// <param name="targetName">目标列名</param>
        /// <param name="targetValue">目标值</param>
        public bool WriteData(string strTable, string keyName, string keyValue, string targetName, string targetValue)
        {
            bool isSuccessed = false;
            string strSql = "";
            if (IsRecordExist(strTable, keyName, keyValue))
            {
                strSql = string.Format("UPDATE {0} SET {1}='{2}' WHERE {3} = '{4}'", strTable, targetName,
                    targetValue, keyName, keyValue);

                if (ExecDataBySql(strSql) > 0)
                    isSuccessed = true;
            }
            else
            {
                strSql = string.Format("INSERT INTO {0} ({1},{2}) VALUES ('{3}','{4}')", strTable, keyName, targetName,
                keyValue, targetValue);

                if (ExecDataBySql(strSql) > 0)
                    isSuccessed = true;
            }

            return isSuccessed;
        }

通过Transact-SQL语句得到DataSet实例

public DataSet GetDataSet(string strSql, string strTable = "table0")
        {
            DataSet ds = null;

            try
            {
                MySqlDataAdapter sda = new MySqlDataAdapter(strSql, m_Conn);
                ds = new DataSet();
                sda.Fill(ds, strTable);
            }
            catch (Exception e)
            {
                ds = null;
                MessageBox.Show(e.Message, "软件提示");
            }

            return ds;
        }

重新封装ExecuteScalar方法,得到结果集中的第一行的第一列

public object GetSingleObject(string strSql)
        {
            object obj = null;
            m_Cmd.CommandType = CommandType.Text;
            m_Cmd.CommandText = strSql;

            try
            {
                if (m_Conn.State == ConnectionState.Closed)
                {
                    m_Conn.Open();
                }

                obj = m_Cmd.ExecuteScalar();
            }
            catch (Exception e)
            {
                obj = null;
                MessageBox.Show(e.Message, "软件提示");
                //throw e;//向上一层抛出异常(上一层使用try{}catch{})或立刻中断(上一层未使用try{}catch{})
            }
            finally
            {
                m_Conn.Close();
            }

            return obj;
        }

获取DataAdapter实例

public MySqlDataAdapter GetDataAdapter(string strSql)
        {
            MySqlDataAdapter sda = null;//声明SqlDataAdapter引用
            try
            {
                sda = new MySqlDataAdapter(strSql, m_Conn);//实例化SqlDataAdapter
            }
            catch (Exception e)//捕获异常
            {
                sda = null;
                MessageBox.Show(e.Message, "软件提示");
            }

            return sda;
        }

将改动后的dataset更新到数据库对应表中

public bool UpdateDataSet(string strSql, DataSet ds)
        {
            //表中必须要有主键,且主键不能是自动增加类型!!!
            //不然会报错:违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条

            bool bo = false;
            if (ds == null) return false;

            DataSet dsChanged = ds.GetChanges();
            if (dsChanged == null) return true;
            if (dsChanged.Tables[0].Rows.Count <= 0) return true;

            DataRow drr = dsChanged.Tables[0].Rows[0];

            //由strSql获取的DataSet与ds结构须相同,且表中必须含有主键或值没有重复的列
            try
            {
                MySqlDataAdapter sda = GetDataAdapter(strSql);
                MySqlCommandBuilder scb = new MySqlCommandBuilder(sda);
                sda.FillSchema(ds, SchemaType.Mapped);//new added

                sda.Update(ds, ds.Tables[0].TableName);

                ds.AcceptChanges();
                bo = true;

                sda.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "更新失败");
                bo = false;
            }

            return bo;
        }

通过Transact-SQL语句,得到DataTable实例

public DataTable GetDataTable(string strSqlCode, string strTableName = "table1")
        {
            DataTable dt = null;//声明DataTable引用
            MySqlDataAdapter sda = null;//声明SqlDataAdapter引用

            try
            {
                sda = new MySqlDataAdapter(strSqlCode, m_Conn);//实例化SqlDataAdapter
                dt = new DataTable(strTableName);//使用指定字符串初始化DataTable实例
                sda.Fill(dt);//将得到的数据源填入dt中        
            }
            catch (Exception e)//捕获异常
            {
                dt = null;
                MessageBox.Show(e.ToString());
            }

            return dt; //dt.Rows.Count可能等于零
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章