C#操作Access數據庫

    class AccessHelper
    {
        //定義連接字符串
        public static string ConnectionString;

        #region 更新數據庫中表
        public static void UpdateDBDatatable(System.Data.DataTable dt, string dbTableName)
        {
            if (!ExistDBData(dbTableName))
            {
                CreatDBData(dt, dbTableName);
            }
            OleDbConnection conn = new OleDbConnection(ConnectionString);
            try
            {
                conn.Open();
                //先把原來的表數據全部刪除
                string delCommand = string.Format("delete * from {0}", dbTableName);
                OleDbCommand dc = new OleDbCommand(delCommand, conn);
                dc.ExecuteNonQuery();

                //將記錄增加進表中,輪詢一行一行插入
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string addCommandText = string.Format("Insert Into {0} Values('{1}'", dbTableName, dt.Rows[i].ItemArray[0]);
                    for (int j = 1; j < dt.Columns.Count; j++)
                    {
                        addCommandText += string.Format(",'{0}'", dt.Rows[i].ItemArray[j]);
                    }
                    addCommandText += ")";
                    dc.CommandText = addCommandText;
                    dc.Connection = conn;
                    dc.ExecuteNonQuery();
                }
                dc.Dispose();
            }

            catch (Exception e)
            {
                if (e.Message.Contains("查詢值的數目與目標字段中的數目不同"))
                {
                    DeleteDBData(dbTableName);
                    UpdateDBDatatable(dt, dbTableName);
                }
            }
            conn.Close();
        }
        #endregion

        #region 新建數據庫表
        public static void CreatDBData(System.Data.DataTable dt, string tableName)
        {
            OleDbConnection conn = new OleDbConnection(ConnectionString);            
            try
            {
                conn.Open();

                //構建字段組合
                string StableColumn = "";
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    var t = dt.Columns[i].DataType;
                    if (t.Name == "String")
                    {
                        StableColumn += string.Format("{0} varchar", dt.Columns[i].ColumnName);
                    }
                    else if (t.Name == "Int32" || t.Name == "Double")
                    {
                        StableColumn += string.Format("{0} int", dt.Columns[i].ColumnName);
                    }
                    if (i != dt.Columns.Count - 1)
                    {
                        StableColumn += ",";
                    }
                }
                string cmdtxt = "";
                if (StableColumn.Contains("ID int"))
                {
                    StableColumn = StableColumn.Replace("ID int,", "");
                    cmdtxt = string.Format("create table {0}(ID autoincrement primary key,{1})", tableName, StableColumn);
                }
                else
                {
                    cmdtxt = string.Format("create table {0}({1})", tableName, StableColumn);
                }
                OleDbCommand dc = new OleDbCommand(cmdtxt, conn);
                dc.ExecuteNonQuery();
                dc.Dispose();
            }

            catch (Exception e)
            {
                System.Windows.MessageBox.Show(e.Message);
            }
            conn.Close();
            conn.Dispose();
        }
        #endregion

        #region 刪除數據庫中表
        public static bool DeleteDBData(string tableName)
        {
            if (ExistDBData(tableName))
            {
                OleDbConnection conn = new OleDbConnection(ConnectionString);
                try 
                {
                    conn.Open();
                    string Command = string.Format("drop table {0}", tableName);
                    OleDbCommand dc = new OleDbCommand(Command, conn);
                    dc.ExecuteNonQuery();
                    dc.Dispose();
                    conn.Close();
                    return true;
                }
                catch (Exception)
                {
                    conn.Close();
                    return false;
                }
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 查詢數據庫是否存在表
        public static bool ExistDBData(string tableName)
        {
            OleDbConnection conn = new OleDbConnection(ConnectionString);
            try   
            {
                conn.Open();
                string Command = string.Format("select * from {0}", tableName);
                OleDbCommand dc = new OleDbCommand(Command, conn);
                dc.ExecuteNonQuery();
                dc.Dispose();
                conn.Close();
                return true;
            }

            catch (Exception)
            {
                conn.Close();
                return false;
            }
        }

        #endregion

        #region 獲取數據庫中表
        public static System.Data.DataTable GetDBData(string tableName)
        {
            if (!ExistDBData(tableName))
            {
                return null;
            }
            try
            {
                OleDbConnection conn = new OleDbConnection(ConnectionString);
                conn.Open();
                string cmdtxt = string.Format("select * from {0}", tableName);
                System.Data.DataTable dt = new System.Data.DataTable();
                OleDbDataAdapter da = new OleDbDataAdapter(cmdtxt, conn);
                da.Fill(dt);
                da.Dispose();
                conn.Close();
                return dt;
            }
            catch (Exception e)
            {
                System.Windows.MessageBox.Show(e.Message);
                return null;
            }
        }
        #endregion
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章