您的位置:首页 > 数据库

C#操作Access数据库方法比较

2008-08-07 12:43 369 查看
C#对于Access数据库的几种操作方法比较如下:

//取得连接
  public OleDbConnection getConn()
  {
   ConnectDatabase connstr=new ConnectDatabase();
   string connStr=connstr.GetConnectionString();
   OleDbConnection oledb=new OleDbConnection(connStr);
   return oledb;
  }

(1)采用OleDbCommand,OleDbDataReader访问数据库

      

          1.查询

          public User getUserFromName(string Searchname)
  {
   User tempUser=new User();
   try
   {
    OleDbConnection oleconn=getConn();//数据库连接
    string strSel="select * from MyUser where UserName='"+ Searchname+"'";//查询语句
    OleDbCommand myCommand=new OleDbCommand(strSel,oleconn);//查询命令
    oleconn.Open();//打开数据库连接
    OleDbDataReader reader;
    reader=myCommand.ExecuteReader();//执行查询命令,返回记录集
    if(reader.Read())
    {
     tempUser.ID=(int)reader["UserID"];
     tempUser.Name=reader["UserName"].ToString();
     tempUser.Salary=(float)reader["UserSalary"];
     tempUser.Password=reader["UserPassword"].ToString();
     tempUser.Memo=reader["UserMemo"].ToString();
     tempUser.Birthday=(DateTime)reader["UserBirthday"];
     tempUser.Address=reader["UserAddress"].ToString();
    }
    else
    {
     throw new Exception("没有记录");
    }
    reader.Close();//关闭记录集
    oleconn.Close();//关闭连接

   }
   catch(Exception e)
   {
    throw new Exception("打开数据库出错"+e.Message);
   }
   return tempUser;
  }

   2.插入记录

public void InsertUser(User insertuser)
  {
   try
   {
    OleDbConnection oleconn=getConn();//数据库连接
    oleconn.Open();//打开数据库连接
    string strSel="insert into [MyUser]([UserName],[UserPassword],[UserSalary],[UserAddress],[UserBirthday],[UserMemo])"; //插入语句
    strSel+=" values('"+insertuser.Name+"','"+insertuser.Password+"',"+insertuser.Salary.ToString();
    strSel+=",'"+insertuser.Address+"',#"+insertuser.Birthday.ToString()+"#,'"+insertuser.Memo+"')";
    OleDbCommand myCommand=new OleDbCommand(strSel,oleconn);//查询命令
    
    myCommand.ExecuteNonQuery();
    oleconn.Close();//关闭连接

   }
   catch(Exception e)
   {
    throw new Exception("打开数据库出错"+e.Message);
   }
  }

  3.删除记录

public void DeleteUser(int m_id)
  {
   try
   {
    OleDbConnection oleconn=getConn();
    oleconn.Open();
    string strSel="Delete From [Myuser] where UserID="+m_id.ToString();
    OleDbCommand myCommand=new OleDbCommand(strSel,oleconn);
    myCommand.ExecuteNonQuery();
    oleconn.Close();
   }
   catch(Exception e)
   {
    throw new Exception("删除记录出错"+e.Message);
   }
  }

(2)采用OleDbDataAdapter,OleDbCommandBuilder,DataSet,DataTable,DataRow访问数据库

添加记录如下

public void InsertUserA(User insertUser)
  {
   using(OleDbConnection conn=getConn())
   {
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    string queryString="Select * from MyUser order by UserID";
    adapter.SelectCommand = new OleDbCommand(queryString, conn);
    OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
               // builder.QuotePrefix="[";
               // builder.QuoteSuffix="]";
    conn.Open();

    DataSet users = new DataSet();
    adapter.Fill(users,"MyUser");
    DataTable dt=new DataTable();
    dt=users.Tables["MyUser"];
    DataRow r=dt.NewRow();
    r["UserName"]=insertUser.Name;
    r["UserPassword"]=insertUser.Password;
    r["UserAddress"]=insertUser.Address;
    
    r["UserSalary"]=insertUser.Salary;
    r["UserBirthday"]=insertUser.Birthday;
    r["UserMemo"]=insertUser.Memo;
    dt.Rows.Add(r);
    adapter.Update(users, "MyUser");

  
   }
  }

需要注意字段不能和关键字相同,否则会出现Insert into出错的提示。解决办法在前一篇

(3)采用参数化查询的方式

public class AccessUtil
 {
  public AccessUtil()
  {
  }
        private string connString;

        public string ConnString
        {
            get { return connString; }
            set { connString = value; }
        }
        public AccessUtil(string connstr)
        {
            this.connString = connstr;
        }
        //带参数的插入语句,返回值为id关键字的值,单条插入语句
        public  int ExecuteInsert(string SQL, OleDbParameter[] parameters)
        {
            using(OleDbConnection conn=new OleDbConnection(connString))
            {
                OleDbCommand cmd = new OleDbCommand(SQL, conn);
                try
                {
                    conn.Open();
                    if (parameters!=null)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = @"Select @@identity";
                    int value = Int32.Parse(cmd.ExecuteScalar().ToString());
                    return value;

                }
                catch (System.Exception e)
                {
                    throw e;
                }
            }
        }
        //不带参数的插入语句,返回值为关键字的值
        public  int ExecuteInsert(string SQL)
        {
            return ExecuteInsert(SQL, null);
        }
        //带参数的插入、删除、更新语句,返回受影响的记录的个数
        public int ExecuteNoQuery(string SQL, OleDbParameter[] parameters)
        {
            using(OleDbConnection conn=new OleDbConnection(connString))
            {
                conn.Open();
                OleDbCommand cmd = new OleDbCommand(SQL, conn);
                try
                {  
                    if (parameters!=null)
                    {
                        cmd.Parameters.AddRange(parameters);
                    }
                    int rows=cmd.ExecuteNonQuery();
                    return rows;
                }
                catch (System.Exception e)
                {
                    throw e;
                }
            }
        }
        //不带参数的插入、删除、更新语句,返回受影响的记录的个数
        public int ExecuteNoQuery(string SQL)
        {
            return ExecuteNoQuery(SQL, null);
        }
        //带参数的查询语句,返回所查询到的记录集
        public DataSet ExecuteQuery(string SQL, OleDbParameter[] parameters)
        {
            using(OleDbConnection conn=new OleDbConnection(connString))
            {
                DataSet ds = new DataSet();
                try
                {
                    conn.Open();
                    OleDbDataAdapter da = new OleDbDataAdapter(SQL, conn);
                    if (parameters != null)
                    {
                        da.SelectCommand.Parameters.AddRange(parameters);
                    }
                    da.Fill(ds, "ds");
                }
                catch(System.Exception e)
                {
                    throw e;
                }
                return ds;
            }
        }
        //不带参数的查询,返回所查询到的记录集
        public DataSet ExecuteQuery(string SQL)
        {
            return ExecuteQuery(SQL, null);
        }

 }

class ManageUser
    {
        //Access数据库工具对象
        AccessUtil accessutil = new AccessUtil(ConnectDatabase.GetConnectionString());
        public ArrayList GetAllUserArr()//获得User表中的所有记录,存储进ArrayList。
        {
            string SQL = "select * from MyUser order by ID";
            DataSet ds=accessutil.ExecuteQuery(SQL);//返回的临时表的名称为“ds”
           /*
             ArrayList arr = new ArrayList();
                        for (int i = 0; i < ds.Tables["ds"].Rows.Count;i++ )
                        {
                            arr.Add(DataRow2User(ds.Tables["ds"].Rows[i]));
                        }*/
            ArrayList arr = DataTable2ArrayList(ds.Tables["ds"]);
            return arr;
           
        }
        public DataSet GetAllUserDataSet()//存储成DataSet
        {
            string SQL = "select * from MyUser order by ID";
            DataSet ds = accessutil.ExecuteQuery(SQL);
            return ds;
        }
       private User DataRow2User(DataRow dr)//将数据表中的一条记录转换为一个User类的实例
       {
               User user = new User();
               user.ID = Int32.Parse(dr["ID"].ToString());
               user.Name = dr["Name"].ToString();
               user.Address = dr["Address"].ToString();
               user.Birthday = Convert.ToDateTime(dr["Birthday"].ToString());
               user.Memo = dr["Memo"].ToString();
               user.Salary =(float) Convert.ToDouble(dr["Salary"].ToString());
               user.Password = dr["Password"].ToString();
               return user;
       }
       private ArrayList DataTable2ArrayList(DataTable dt)//将一个表中的记录转化为ArrayList对象
       {
           ArrayList tempArr = new ArrayList();
           DataTableReader dr = new DataTableReader(dt);
           while(dr.Read())
           {
           User user = new User();
           user.ID = Int32.Parse(dr["ID"].ToString());
           user.Name = dr["Name"].ToString();
           user.Address = dr["Address"].ToString();
           user.Birthday = Convert.ToDateTime(dr["Birthday"].ToString());
           user.Memo = dr["Memo"].ToString();
           user.Salary = (float)Convert.ToDouble(dr["Salary"].ToString());
           user.Password = dr["Password"].ToString();
           tempArr.Add(user);
           }
           return tempArr;
       }
        public  DataSet GetUserByName(string name)
        {
            String SQL = "Select * from MyUser where Name=?";
            OleDbParameter[] parameter = new OleDbParameter[1];
            parameter[0] = new OleDbParameter("@Name", OleDbType.VarChar);
            parameter[0].Value = name;
            DataSet dt= accessutil.ExecuteQuery(SQL, parameter);
            return dt;
        }
        public int InsertUser(User inUser)
        {
            String SQL = "insert into [MyUser]([Name],[Password],[Salary],[Address],[Birthday],[Memo]) values(?,?,?,?,?,?)";
            OleDbParameter[] parameters = new OleDbParameter[6];
            parameters[0] = new OleDbParameter("@Name", OleDbType.VarChar);
            parameters[0].Value = inUser.Name;
            parameters[1] = new OleDbParameter("@Password", OleDbType.VarChar);
            parameters[1].Value = inUser.Password;
            parameters[2] = new OleDbParameter("@Salary", OleDbType.Single);
            parameters[2].Value = inUser.Salary;
            parameters[3] = new OleDbParameter("@Address", OleDbType.VarChar);
            parameters[3].Value = inUser.Address;
            parameters[4] = new OleDbParameter("@Birthday", OleDbType.Date);
            parameters[4].Value = inUser.Birthday;
            parameters[5] = new OleDbParameter("@Memo", OleDbType.VarChar);
            parameters[5].Value = inUser.Memo;
            return accessutil.ExecuteInsert(SQL, parameters);
        }
        public void DelUserById(int id)
        {

            String SQL = "DELETE FROM [MyUser] where ID=?";
            OleDbParameter[] parameters = new OleDbParameter[1];
            parameters[0] = new OleDbParameter("@ID", OleDbType.Integer);
            parameters[0].Value = id;
            accessutil.ExecuteNoQuery(SQL, parameters);
        }
        public void UpdateUser(User userupdate)
        {
            String SQL = "update [MyUser] Set [Name]=?,[Password]=?,[Salary]=?,[Address]=?,[Birthday]=?,[Memo]=? where [ID]=?";
            OleDbParameter[] parameters = new OleDbParameter[7];
            parameters[0] = new OleDbParameter("@Name", OleDbType.VarChar);
            parameters[0].Value = userupdate.Name;
            parameters[1] = new OleDbParameter("@Password", OleDbType.VarChar);
            parameters[1].Value = userupdate.Password;
            parameters[2] = new OleDbParameter("@Salary", OleDbType.Single);
            parameters[2].Value = userupdate.Salary;
            parameters[3] = new OleDbParameter("@Address", OleDbType.VarChar);
            parameters[3].Value = userupdate.Address;
            parameters[4] = new OleDbParameter("@Birthday", OleDbType.Date);
            parameters[4].Value = userupdate.Birthday;
            parameters[5] = new OleDbParameter("@Memo", OleDbType.VarChar);
            parameters[5].Value = userupdate.Memo;
            parameters[6] = new OleDbParameter("@ID", OleDbType.Integer);
            parameters[6].Value = userupdate.ID;
            accessutil.ExecuteNoQuery(SQL, parameters);
        }
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息