C# Access应用随记

最近在做一个窗体应用项目,简单记下过程中遇到的关于Access数据调用的一些问题点和一些弯路
Winform对于Access的调用对于数据存储和一些数据操作确实比较非常方便,一些常用的Sql语句也比较能够很好得适应和使用,比如:

    string.Format("select * from TableName);//查找获取数据表TableName
    string.Format("select * from TableName where SchKey like '% value %'");//在数据表TableName查找特定列SchKey特定值value
    string.Format("select distinct ColumnName from TableName");//查找数据表TableName下列ColumnName的集合
    。。。等等,可以参考SQL绝大部分语句进行测试

这里要注意的是,在时间区间查找操作时,需要注意,Access语句需在时间量两侧添加上“#”,代码如下:

string.Format("select * from TableName where DateTimeColumnName between  #" + dateTimePicker1.Value.ToString("yyyy/MM/dd 00:00:00") + "# and  #" + dateTimePicker2.Value.ToString("yyyy/MM/dd 23:59:59") + "#");//查找数据表TableName时间列DateTimeColumnName中数值在一定范围内的DataTable集合

其中,用的是between…and…句式,同样,>=…and <=…也同样适用,这里比较日期/时间需要涉及到时间,采用between…and…更为方便。

数据表的Excel输出,代码如下:

SaveFileDialog saveFile = new SaveFileDialog();
saveFile.Filter = ("Excel 文件(*.xls)|*.xls");//指定文件后缀名为Excel 文件。  
if (saveFile.ShowDialog() == DialogResult.OK)
{
    string filename = saveFile.FileName;
    if (System.IO.File.Exists(filename))
    {
        System.IO.File.Delete(filename);//如果文件存在删除文件。  
    }
    int index = filename.LastIndexOf("//");//获取最后一个/的索引  
    filename = filename.Substring(index + 1);//获取excel名称(新建表的路径相对于SaveFileDialog的路径)  
    //select * into 建立 新的表。  
    //[[Excel 8.0;database= excel名].[sheet名] 如果是新建sheet表不能加$,如果向sheet里插入数据要加$.   
    //sheet最多存储65535条数据。  
    string sql = "select top 65535 *  into   [Excel 8.0;database=" + filename + "].[用户信息] from SilkType";
    if (Db.GetState(@sql) > 0)
    {
        MessageBox.Show("导出数据成功", "导出数据", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}

这里用的是网友贴的代码,导出Excel代码,简单快速,很好用。
关于WinForm上对于Access的应用内容还有很多有待研究,暂且记下这些,也方便以后查看。
最后贴下七拼八凑的Access语句使用的类码,写成类的好处很方便调用,如下类码:

class SQL
    {
        OleDbConnection conn = null;
        OleDbCommand cmd = null;
        /// <summary>
        /// 带参的构造函数
        /// </summary>
        /// <param name="path"></param>
        public SQL(string path) 
        { 
            conn = new OleDbConnection(); 
            //conn.ConnectionString = "initial catalog=pubs;data source=.;user id=sa;password="; 
            //conn.ConnectionString = Convert.ToString(System.Configuration.ConfigurationSettings.AppSettings["datasource"]); 
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @path + ";Persist Security Info=True";//path为Access数据表存放路径,可采用注册表形式,这里不细说了
            cmd = new OleDbCommand(); 
            cmd.Connection = conn; 
        }
        public DataTable GetTable(string OleDb)
        {
            DataSet ds = new DataSet();

            try
            {
                cmd.CommandText = OleDb;
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmd;

                da.Fill(ds);
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return null;

            }
            return ds.Tables[0] ?? new DataTable();
        }

        /// <summary> 
        /// 获取数据根据OleDb语句 带参数 的  
        /// </summary> 
        /// <param name="OleDb"></param> 
        /// <param name="pas"></param> 
        /// <returns></returns> 
        public DataTable GetTable(string OleDb, params OleDbParameter[] pas)
        {
            DataSet ds = new DataSet();
            try
            {
                cmd.CommandText = OleDb;
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
                cmd.Parameters.Clear();

                foreach (OleDbParameter temppa in pas)
                {
                    cmd.Parameters.Add(temppa);
                }


                da.Fill(ds);
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return null;
            }
            return ds.Tables[0] ?? new DataTable();
        }
        /// <summary> 
        /// 根据OleDb语句返回跟新状态 
        /// </summary> 
        /// <param name="OleDb"></param> 
        /// <returns></returns> 
        public int GetState(string OleDb)
        {
            int succ = 0;
            try
            {
                cmd.CommandText = OleDb;
                conn.Open();
                succ = cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex)
            {
                this.ShowError(ex.Message);
            }
            return succ;

        }
        /// <summary> 
        /// 根据OleDb语句返回跟新状态带参数的  
        /// </summary> 
        /// <param name="OleDb">OleDb语句</param> 
        /// <param name="pas">参数的集合</param> 
        /// <returns></returns> 
        public bool GetState(string OleDb, params OleDbParameter[] pas)
        {
            bool succ = false;
            try
            {
                cmd.CommandText = OleDb;
                cmd.Parameters.Clear();

                foreach (OleDbParameter temppa in pas)
                {
                    cmd.Parameters.Add(temppa);
                }
                conn.Open();
                succ = cmd.ExecuteNonQuery() > 0 ? (true) : (false);
                conn.Close();
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return false;
            }
            return succ;

        }
        /// <summary> 
        /// 根据OleDb语句返回第一个单元格的数据 
        /// </summary> 
        /// <param name="OleDb"></param> 
        /// <returns></returns> 
        public string GetOne(string OleDb)
        {
            string res = "";
            try
            {
                cmd.CommandText = OleDb;
                conn.Open();
                res = cmd.ExecuteScalar() == null ? ("") : (Convert.ToString(cmd.ExecuteScalar()));
                conn.Close();
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return null;
            }
            return res;
        }
        /// <summary> 
        ///  根据OleDb语句返回第一个单元格的数据带参数的  
        /// </summary> 
        /// <param name="OleDb"></param> 
        /// <param name="pas"></param> 
        /// <returns></returns> 
        public string GetOne(string OleDb, params OleDbParameter[] pas)
        {
            string res = "";
            try
            {
                cmd.CommandText = OleDb;
                cmd.Parameters.Clear();

                foreach (OleDbParameter temppa in pas)
                {
                    cmd.Parameters.Add(temppa);
                }
                conn.Open();
                res = cmd.ExecuteScalar() == null ? ("") : (Convert.ToString(cmd.ExecuteScalar()));
                conn.Close();
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return null;
            }
            return res;
        }
        /// <summary> 
        /// 返回数据的DataReader 
        /// </summary> 
        /// <param name="OleDb"></param> 
        /// <returns></returns> 
        public OleDbDataReader GetDataReader(string OleDb)
        {
            OleDbDataReader dr = null;
            try
            {
                conn.Open();
                cmd.CommandText = OleDb;
                dr = cmd.ExecuteReader();
                conn.Close();
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return null;
            }
            return dr;
        }
        /// <summary> 
        /// 返回数据的DataReader带参数的  
        /// </summary> 
        /// <param name="OleDb"></param> 
        /// <param name="pas"></param> 
        /// <returns></returns> 
        public OleDbDataReader GetDataReader(string OleDb, params OleDbParameter[] pas)
        {
            OleDbDataReader dr = null;
            try
            {
                conn.Open();
                cmd.Parameters.Clear();

                foreach (OleDbParameter temppa in pas)
                {
                    cmd.Parameters.Add(temppa);
                }

                cmd.CommandText = OleDb;
                dr = cmd.ExecuteReader();
                conn.Close();
            }
            catch (Exception ex)
            {

                this.ShowError(ex.Message);
                return null;
            }
            return dr;
        }
        /// <summary> 
        /// 打开连接 
        /// </summary> 
        public void OpenConn()
        {
            if (conn.State != ConnectionState.Open)
            {
                try
                {
                    conn.Open();
                }
                catch (Exception ex)
                {

                    this.ShowError(ex.Message);
                    return;
                }
            }
        }
        /// <summary> 
        /// 关闭连接 
        /// </summary> 
        public void CloseConn()
        {
            if (conn.State != ConnectionState.Closed)
            {
                try
                {
                    conn.Close();
                    cmd = null;
                    conn = null;
                }
                catch (Exception ex)
                {

                    this.ShowError(ex.Message);
                    return;
                }
            }
        }
        /// <summary> 
        /// 弹出错误的信息  
        /// </summary> 
        /// <param name="err"></param> 
        public void ShowError(string err)
        {

            System.Windows.MessageBox.Show(Script(err, ""));
            conn.Close();

        }
        /// <summary> 
        /// 显示信息  
        /// </summary> 
        /// <param name="err"></param> 
        public void ShowMessage(string mes, string loc)
        {
            System.Windows.MessageBox.Show(Script(mes, loc));
        }
        /// <summary> 
        /// javascript脚本 
        /// </summary> 
        /// <param name="mess"></param> 
        /// <param name="loc"></param> 
        /// <returns></returns> 
        public string Script(string mess, string loc)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("<script language='javascript'>");
            sb.Append("alter('");
            sb.Append(mess);
            sb.Append("');");
            sb.Append(loc);
            sb.Append("</script>");
            return sb.ToString();

        } 

对于一个常年研究工控的人来说,要深入了解这些还真需花点时间,慢慢不着急,个人探究这些内容主要还是看中Winform在上位工控机上的应用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heart_Ache

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值