首页 > 代码库 > C# 操作Access数据库
C# 操作Access数据库
<pre name="code" class="csharp"><span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);"> </span><span style="font-family: Arial, Helvetica, sans-serif; font-weight: normal; background-color: rgb(255, 255, 255);"><span style="font-size:24px;">c# 操作Access数据库</span></span>
这两天做项目,需要将数据存储到Access数据库中,并在DataGridView控件中显示出来。Access数据库的语法与SQL的有所不同,在此总结一下数据库的连接以及增删改基本操作。
在程序开始时,我打算使用一些数据库操作语句来创建一个数据库,不过好像用的不是很成功。而且如果要手动创建数据库,则在启动程序时,要判断没有某张表时,要创建该表。
1.首先要连接数据库:
其中的SewWorkStation.accdb为项目中要用到的数据库。
public static string dbPath = System.Windows.Forms.Application.StartupPath + "\\SewWorkStation.accdb"; public string dbName = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+dbPath+";"; public OleDbConnection oleDbConn = null; public DBOperate() { oleDbConn = new OleDbConnection(dbName); }
2.用语句创建表:
public void CreateRobotTable( ) { try { oleDbConn.Open(); string excuteStr = "Create Table t_Robot (rId int ,rName text,rIP text,rPort text)"; OleDbCommand oleDbComm = new OleDbCommand(excuteStr, oleDbConn); oleDbComm.ExecuteNonQuery(); } catch (Exception e) { MessageBox.Show(e.Message); } finally { oleDbConn.Close(); } }当然也可以在外部建立好数据库建好表,然后在程序中只进行增删改操作,这样也不用检查表是否存在了。
大家可能看到我这里创建表的属性,与下面查询时表的属性不一致哈~,其实我是在外部创建好一个空的表的,这里面只是记录下语法啦。
在网上查到了一段代码,判断数据库中是否存在某表,不过我执行了几次,就是刚创建了表也找不到,dtTable中是空的,大家如果有什么好的方法可以提醒我一下,。
public bool VerifyTableInAccess( string TableName) { bool flag = false; try { oleDbConn.Open(); DataTable dtTable = oleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, TableName }); if (dtTable == null) { flag = false; return flag; } foreach (DataRow DRow in dtTable.Rows) { if (DRow["TABLE_NAME"].ToString().Trim().ToUpper() == TableName.Trim().ToUpper()) { flag = true; break; } } } catch (Exception e) { MessageBox.Show(e.Message); flag = false; } finally { oleDbConn.Close(); } return flag; }
3.预览表
public void ShowTable( string tableName,DataGridView dataGridView ) { try { oleDbConn.Open(); DataSet dataSet = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter(); OleDbCommand command = new OleDbCommand("select * from " + tableName, oleDbConn); adapter.SelectCommand = command; adapter.Fill(dataSet); dataGridView.DataSource = dataSet.Tables[0]; } catch (Exception e) { MessageBox.Show(e.Message); } finally { oleDbConn.Close(); } }这里面使用到了适配器OleDbDataAdapter,也可以使用OleDbDataReader来读取。
4.添加数据
public void Insert(string table, object obj ) { string insertStr = ""; try { oleDbConn.Open(); OleDbCommand oleDbComm = null; switch (table) { case "t_Robot": MRobot robot = (MRobot)obj; insertStr = "Insert into t_Robot(机器人编号,机器人名称,机器人IP,机器人端口) Values(?,?,?,?)"; oleDbComm = new OleDbCommand(insertStr, oleDbConn); oleDbComm.Parameters.AddWithValue("机器人编号", robot.Id); oleDbComm.Parameters.AddWithValue("机器人名称", robot.Name); oleDbComm.Parameters.AddWithValue("机器人IP", robot.IP); oleDbComm.Parameters.AddWithValue("机器人端口", robot.Port); break; default: break; } if (!"".Equals(insertStr)) { oleDbComm.ExecuteNonQuery(); } } catch (Exception e) { MessageBox.Show(e.Message); } finally { oleDbConn.Close(); }这里要添加数据,就需要参数化查询的方式,使用OleDbCommand.Parameters这个属性了。
5.删除数据
通过id来删除数据,开始时使用了Access中自动的Id,但发现即使删了一条数据后,后面数据的id没有自动更新,如果再新添加一条数据,id是max(id)+1,这点要注意。
public void Delete(string table,int id ) { string delStr = ""; string paramName = ""; try { switch(table) { case "t_Robot": delStr = "Delete * from t_Robot where 机器人编号=?"; paramName = "rId"; break; default: break; } if(!"".Equals(delStr)) { oleDbConn.Open(); OleDbCommand oleDbComm = new OleDbCommand(delStr, oleDbConn); oleDbComm.Parameters.AddWithValue(paramName, id); oleDbComm.ExecuteNonQuery(); } } catch (Exception e) { MessageBox.Show(e.Message); }
6.更新id
public void UpdateId(string table ,int id ) { string updateStr = ""; try { oleDbConn.Open(); OleDbCommand oleDbComm = null; switch (table) { case "t_Robot": updateStr = "update t_Robot set 机器人编号 = 机器人编号-1 where 机器人编号>@index"; break; default: break; } if (!"".Equals(updateStr)) { oleDbComm = new OleDbCommand(updateStr, oleDbConn); oleDbComm.Parameters.AddWithValue("@index",id); oleDbComm.ExecuteNonQuery(); } } catch (Exception e) { MessageBox.Show(e.Message); } finally { oleDbConn.Close(); } }
注意喔,上面的更新语句中是update tableName set id = id -1 where id > delId ; 看到没里面没有select...,Access的更新语句与sql的update语句不同。
7.修改数据public void Update(string table ,object obj ) { string updateStr = ""; try { oleDbConn.Open(); OleDbCommand oleDbComm = null; switch (table) { case "t_Robot": MRobot robot = (MRobot)obj; updateStr = "update t_Robot set 机器人名称=?,机器人IP=?,机器人端口=? where 机器人编号=?"; oleDbComm = new OleDbCommand(updateStr, oleDbConn); oleDbComm.Parameters.AddWithValue("机器人名称", robot.Name); oleDbComm.Parameters.AddWithValue("机器人IP", robot.IP); oleDbComm.Parameters.AddWithValue("机器人端口", robot.Port); oleDbComm.Parameters.AddWithValue("机器人编号", robot.Id); break; default: break; } if(!"".Equals(updateStr)) { oleDbComm.ExecuteNonQuery(); } } catch (Exception e) { MessageBox.Show(e.Message); } finally { oleDbConn.Close(); } }
C# 操作Access数据库
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。