DbHelper 操作SQL Server、Oracle、Access、Excel、CSV五种数据源+ Xml文件读写
来源:互联网 发布:地图标注软件 编辑:程序博客网 时间:2024/05/19 06:36
编译环境:VS2008+Win7
数据源:
SQL Server 2005,Oracle 10g,Access 2003,Excel 2003,CSV,Xml
功能:
查看所有数据:读取数据表中所有数据显示在DataGridView中
查看学生总数:显示数据库中学生总数
插入一条记录:插入 003,李,23,0,1993-3-1记录
删除一条记录:删除userid为003的记录
修改一条记录:将userid为003的记录的usersex修改为1
读取/修改配置文件
DbHelper类用法
DOM模型操作Xml文件
示例源码下载地址:
http://download.csdn.net/detail/daxiang12092205/4516239
DbHelper类源码参考:
http://blog.csdn.net/charlsechang/article/details/6249284
XML文件操作参考:
http://hi.baidu.com/wangweixp/blog/item/bca10dfa43732e9759ee90ff.html
读取修改配置文件源码:
private void OperAppConfig() { //读取 string strName = ConfigurationManager.AppSettings["DbHelperProvider"]; //Console.WriteLine("------name1 is :" + strName); Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //修改 cfa.AppSettings.Settings["DbHelperProvider"].Value = "System.Data.SqlClient"; cfa.AppSettings.Settings["DbHelperConnectionString"].Value = "Data Source=.\\sqlexpress;Initial Catalog=mytest;Integrated Security=True"; cfa.Save(); //操作结束刷新节点,否则下次取值不变,所有的操作未映射到磁盘文件App.Config ConfigurationManager.RefreshSection("appSettings"); strName = ConfigurationManager.AppSettings["DbHelperProvider"]; //Console.WriteLine("------name2 is is:" + strName); }
SQL Server删除数据源码:
private void btnDelete_Click(object sender, EventArgs e) { try { DbHelper db = new DbHelper(); tsslStatus.Text = "正在删除数据"; string sqlInsert = "delete from [student] where userid='003' "; DbCommand dbcmd = db.GetSqlStringCommond(sqlInsert); int execresult = db.ExecuteNonQuery(dbcmd); //Console.WriteLine("------:" + execresult); if (execresult > 0) { tsslStatus.Text = "删除成功"; } else { tsslStatus.Text = "删除失败"; } } catch (System.Data.SqlClient.SqlException) { tsslStatus.Text = "删除失败"; } }
Oracle查看学生总数源码:
private void btnGetNum_Click(object sender, EventArgs e) { try { DbHelper db = new DbHelper(); tsslStatus.Text = "正在获取数据"; string sqlInsert = "select count(*) from userinfo"; DbCommand dbcmd = db.GetSqlStringCommond(sqlInsert); //不能用int execresult = (int)db.ExecuteScalar(dbcmd);出现InvalidCaseException异常 object obj = db.ExecuteScalar(dbcmd); int execresult = Convert.ToInt32(obj); //Console.WriteLine("------:" + execresult); if (execresult >= 0) { tsslStatus.Text = "共计:"+execresult.ToString(); } else { tsslStatus.Text = "获取失败"; } } catch (System.Data.OracleClient.OracleException ex) { //Console.WriteLine("------" + ex.Message); tsslStatus.Text = "获取失败"; } }
Access修改数据源码:
private void btnModify_Click(object sender, EventArgs e) { try { DbHelper db = new DbHelper(); tsslStatus.Text = "正在修改数据"; string sqlInsert = "update [student] set usersex='1' where userid='003' "; DbCommand dbcmd = db.GetSqlStringCommond(sqlInsert); int execresult = db.ExecuteNonQuery(dbcmd); //Console.WriteLine("------:" + execresult); if (execresult > 0) { tsslStatus.Text = "修改成功"; } else { tsslStatus.Text = "修改失败"; } } catch (System.Data.OleDb.OleDbException) { tsslStatus.Text = "修改失败"; } }
Excel删除数据源码:
private void btnDelete_Click(object sender, EventArgs e) { try { DbHelper db = new DbHelper(); tsslStatus.Text = "正在删除数据"; //Excel工作表中的行与真正的关系型数据库的行是有些不一样的, //删除Excel数据时,受到的限制要比从关系数据源中删除数据时更多,故不能用delete语句删除 //string sqlInsert = "delete from [Sheet1$] where userid=1003 "; //通过这种方法,这一行并没有真正删除掉,所以在select时要进行一定筛选, //如select * from [Sheet1$] where userid is not null string sqlInsert = "update [Sheet1$] set userid=null,username=null,userage=null,usersex=null,userbirth=null where userid=1003"; DbCommand dbcmd = db.GetSqlStringCommond(sqlInsert); int execresult = db.ExecuteNonQuery(dbcmd); //Console.WriteLine("------:" + execresult); if (execresult > 0) { tsslStatus.Text = "删除成功"; } else { tsslStatus.Text = "删除失败"; } } catch (System.Data.OleDb.OleDbException) { tsslStatus.Text = "删除失败"; } }
CSV删除数据源码:
private void btnDelete_Click(object sender, EventArgs e) { DbHelper db = new DbHelper(); tsslStatus.Text = "正在删除数据"; //csv不允许更新或删除记录,详细解释见:http://support.microsoft.com/kb/828892 //故不能用sql语句直接操作,采用 读取数据到datatable-修改datatable-删除源文件-导出datatable到新文件 方法 DataTable dt = new DataTable(); dt = GetAllData(); if (dt != null && dt.Rows.Count >= 0) { for (int i = 0; i < dt.Rows.Count;i++ ) { if (dt.Rows[i][0].ToString().Trim() == "1003") { dt.Rows.RemoveAt(i); break; } } if (File.Exists(filepath)) { File.Delete(filepath); } ExportToFile(dt); tsslStatus.Text = "删除成功"; } else { tsslStatus.Text = "删除失败"; } } /// <summary> /// 获取csv文件所有数据,保存到DataTable中并返回 /// </summary> /// <returns></returns> private DataTable GetAllData() { try { DbHelper db = new DbHelper(); string sqlInsert = "select * from [student.csv]"; DbCommand dbcmd = db.GetSqlStringCommond(sqlInsert); DataTable dt = db.ExecuteDataTable(dbcmd); if (dt != null && dt.Rows.Count > 0) { return dt; } else { return null; } } catch (Exception ex) { //Console.WriteLine("------ ex :" + ex.Message); return null; } } /// <summary> /// 将DataTable数据导出到csv文件 /// </summary> /// <param name="dataTable"></param> public static void ExportToFile(DataTable dataTable) { try { using (StreamWriter sw = new StreamWriter(filepath, false, Encoding.Default)) { string repStr = ","; string colHead = string.Empty; for (int i = 0; i < dataTable.Columns.Count; i++) { colHead += dataTable.Columns[i].ColumnName + repStr; } if (colHead.Contains(repStr)) { colHead = colHead.Remove(colHead.LastIndexOf(repStr)); } sw.WriteLine(colHead); for (int i = 0; i < dataTable.Rows.Count; i++) { int cell = dataTable.Rows[i].ItemArray.Count(); string content = string.Empty; for (int j = 0; j < cell; j++) { content += dataTable.Rows[i][j] + repStr; } if (content.Contains(repStr)) { content = content.Remove(content.LastIndexOf(repStr)); } sw.WriteLine(content); } } } catch (Exception ex) { //Console.WriteLine("------ :" + ex.Message); } }
XML获取所有数据源码:
private static string dirpath = Application.StartupPath + "\\"; private static string filepath = Application.StartupPath + \\student.xml; private void btnGetAllData_Click(object sender, EventArgs e) { tsslStatus.Text = "正在获取"; //利用DOM模型读取xml文件 XmlDocument xmldoc = new XmlDocument(); XmlElement xmlelemF; XmlElement xmlelemS1; xmldoc.Load(filepath); //将读取的数据保存到DataTable里 DataTable dt = new DataTable(); //获取用户数和属性数 int numF = xmldoc.DocumentElement.ChildNodes.Count; int numS = xmldoc.DocumentElement.ChildNodes[0].ChildNodes.Count; //Console.WriteLine("------num :" + numF+","+numS); //获取所有的属性名,作为DataTable的列名 xmlelemF = (XmlElement)xmldoc.DocumentElement.ChildNodes[0]; for (int i = 0; i < numS; i++) { xmlelemS1 = (XmlElement)xmlelemF.ChildNodes[i]; dt.Columns.Add(xmlelemS1.LocalName, System.Type.GetType("System.String")); } //遍历所有节点,将节点值添加到DataTable中 for (int i = 0; i < numF; i++) { xmlelemF = (XmlElement)xmldoc.DocumentElement.ChildNodes[i]; DataRow dr = dt.NewRow(); for (int j = 0; j < numS; j++) { xmlelemS1 = (XmlElement)xmlelemF.ChildNodes[j]; //Console.WriteLine("------" +i+","+j+":"+ xmlelemS1.FirstChild.Value); dr[j] = xmlelemS1.FirstChild.Value; } dt.Rows.Add(dr); } //Console.WriteLine("------row num :" + dt.Rows.Count); dgvStudent.DataSource = dt; tsslStatus.Text = "获取成功"; }
细节问题:
1 CSV数据源,判断userid为1003记录是否存在时,语句select username from [student.csv] where userid=1003,其中1003不能改为‘1003’
2 csv不允许更新或删除记录,详细解释见:http://support.microsoft.com/kb/828892,
故不能用sql语句直接操作,采用 读取数据到datatable-修改datatable-删除源文件-导出datatable到新文件方法
3 Excel工作表中的行与真正的关系型数据库的行是有些不一样的,删除Excel数据时,受到的限制要比从关系数据源中删除数据时更多,故不能用delete语句删除。用update 表 set 字段=null 方法,通过这种方法,这一行并没有真正删除掉,所以在select时要进行一定筛选,如select * from [Sheet1$] where userid is not null
4 Oracle数据源修改数据时,不能用下面方法,执行结果obj为null,出现NullReferenceException
object obj = db.ExecuteScalar(dbcmd);
int execresult = Convert.ToInt32(obj);
可用 int execresult = db.ExecuteNonQuery(dbcmd);
5 Oracle数据源,命令语句如:select * from userinfo,userinfo不能写为[userinfo],否则出现OracleException ORA-00903:表名无效异常
如有问题,欢迎留言。
- DbHelper 操作SQL Server、Oracle、Access、Excel、CSV五种数据源+ Xml文件读写
- (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码
- Oracle,SQL Server,Access万能数据库通用类DBHelper
- Oracle,SQL Server,Access万能数据库通用类DBHelper
- sql server中的五种数据类型
- SQL读写CSV文件
- csv文件读写操作
- DBHelper SQL Server数据库操作类
- sql server 直接导入excel文件或.csv文件
- .NET操作Excel/CSV文件以及分析JSON/XML数据类型
- c++读写操作CSV文件
- python读写操作csv文件
- SP_addlinkedserver 远程连接 (oracle,sql server,access,excel)
- SP_addlinkedserver 小结 (oracle,sql server,access,excel)
- SQL Server Oracle DB2 三种数据库性能比较
- SQL Server与Oracle、DB2三种数据库比较
- Oracle,MySQL,SQL Server三种数据库用法差异
- python读写word、excel、csv、json文件
- 生成伪随机数的函数int rand(void)和void srand(unsigned seed);
- 跟我一起学Oracle 11g
- windows server 2003环境下安装oracle 10g
- 使用HtmlUnit抓取百度搜索结果
- HDU2059
- DbHelper 操作SQL Server、Oracle、Access、Excel、CSV五种数据源+ Xml文件读写
- 循环链表(约瑟夫环)
- Android Handler Looper Message工作机制
- 数据结构--图
- 在ios中实现图片环绕文字效果
- 繁忙的一天
- 模拟 系统headtitle的效果
- Visual Studio 2005 提示”试图运行项目时出错:无法启动调试。绑定句柄无效”的解决方案
- STDIN_FILENO的作用及与stdin 的区别