2022年C#编写数据库连接测试事例知识讲解 .pdf
C#编 写 数 据 库 连 接 测试 事 例名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - C#实现数据库测试1.实现 sqlserver2000 的数据读取如图所示:可以通过连接数据库sql-选择数据库 -选择表来完成; #region连 ?接 ? 数o y据Y库a privatevoid button1_Click(object sender, EventArgs e) initdb(textBox1.Text, textBox2.Text.ToString(),0); #endregion #region 读取选择的数据库,将数据库中包含的表加入到listbox2中 private void listBox1_DoubleClick(object sender, EventArgs e) string s = ; s = listBox1.SelectedItem.ToString(); initdb(textBox1.Text, s,0); #endregion #region 读取某表的内容 private void listBox2_DoubleClick(object sender, EventArgs e) string s = ; string s1 = ; s = listBox1.SelectedItem.ToString(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - s1 = listBox2.SelectedItem.ToString(); string retstr = open_table(textBox1.Text, s, s1, ); open_table(textBox1.Text, s, s1,retstr); #endregion 其中 initdb 函数如下: #region 初始化 sql,连接ip 地址,也可以用于读取某数据库有多少个数据表initdb / if dbname is null ,then return system_db_name /else connect dqlname(ip),connect dbname return tablename of dbname public bool initdb(string sqlname/*sqlserver ip */,string dbname /*database name */,int bz) /如果数据库名称为空,返回数据库的所有名称; if (dbname = ) connectstring = server = + sqlname + ;database=master;uid=sa;pwd=; commandstring = select name from sysdatabases; try string yg_code = 1; /这里是定义了一个参数数组,不过里面就一条参数 SqlParameter parameters = new SqlParameter(yh_code, yg_code) ; /这个 SqlDataAdapter 很强大,与数据库的交互就靠它来实现的 /在初始化时把sqlCommand,connString 传入设计好的构造器 SqlDataAdapter Adapter = new SqlDataAdapter(commandstring, connectstring); /将参数加入到Adapter 中 Adapter.SelectCommand.Parameters.AddRange(parameters); /这句话就是集执行查询和保存功能于一体的核心语句了 /简单来说就是执行了sqlCommand 里的查询语句,并且把结果以表的形式存在了ds 里面 ds.Clear(); dt.Clear(); Adapter.Fill(ds); /把 ds 表集合里的第一个表复制给dt dt = ds.Tables0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - /dr.Close();/关闭执行 /con.Close();/关闭数据库 int count = dt.Columns.Count;/ 一条记录包含的列数; int rows = dt.Rows.Count;/记录个数 Console.WriteLine( 查找到记录个数:0,每条记录有1个字段 , rows, count); recordstru myrec = new recordstru(1000); /string tmp = ; int i = 0; while (i+ rows) listBox1.Items.Add(dt.Rowsi0.ToString(); catch (Exception ex) Console.WriteLine(ex.Message); else connectstring = server =+sqlname+;database=+dbname+;uid=sa;pwd=; if(bz=0) commandstring = SELECT * FROM sysobjects WHERE (xtype = U); else commandstring = dbname; try string yg_code = 1; /这里是定义了一个参数数组,不过里面就一条参数 SqlParameter parameters = new SqlParameter(yh_code, yg_code) ; /这个 SqlDataAdapter 很强大,与数据库的交互就靠它来实现的 /在初始化时把sqlCommand,connString 传入设计好的构造器 SqlDataAdapter Adapter = new SqlDataAdapter(commandstring, connectstring); /将参数加入到Adapter 中名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - Adapter.SelectCommand.Parameters.AddRange(parameters); /这句话就是集执行查询和保存功能于一体的核心语句了 /简单来说就是执行了sqlCommand 里的查询语句,并且把结果以表的形式存在了ds 里面 ds.Clear(); dt.Clear(); Adapter.Fill(ds); /把 ds 表集合里的第一个表复制给dt dt = ds.Tables0; /dr.Close();/关闭执行 /con.Close();/关闭数据库 int count = dt.Columns.Count;/ 一条记录包含的列数; int rows = dt.Rows.Count;/记录个数 Console.WriteLine( 查找到记录个数:0,每条记录有1个字段 , rows, count); recordstru myrec = new recordstru(1000); string tmp = ; int i = 0; listBox2.Items.Clear(); while (i+ rows) tmp = ; listBox2.Items.Add(dt.Rowsi0.ToString(); /Console.WriteLine(dt.Rowsi0.ToString(); catch (Exception ex) return false; #endregion 2.实现 access数据库的读写 #region 读取 access 数据库 private void button2_Click(object sender, EventArgs e) try 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - string mypath = Application.StartupPath + mydata.accdb; /连接数据库的路径及数据库名 if (!File.Exists(mypath) /判断文件是否存在 MessageBox.Show(mypath + 文件未找到! ); return; else Console.WriteLine(mypath); string constr = Provider = Microsoft.ACE.OLEDB.12.0; Data Source = + mypath; / 生成连接数据库字符串 OleDbConnection mycon = new OleDbConnection(constr); / 定 义OleDbConnection 对象实例并连接数据库 string mysql = select * from mytable; /Sql 查询语句 OleDbDataAdapter myada = new OleDbDataAdapter(mysql, mycon); / 定义OleDbDataAdapter 对象实例并连接数据库表 DataSet myds = new DataSet(); / 定义 DataSet 对象实例 myada.Fill(myds); / 填充数据集 dataGridView1.DataSource = myds.Tables0.DefaultView; / 连接数据表格,显示数据 mycon.Close(); / 关闭 OleDbConnection 对象实例 mycon.Dispose(); /释放 OleDbConnection 对象实例所占资源空间 catch return; #endregion 3.实现 sqllite 的读写; #region 连接 sqllite 数据库 private void button3_Click(object sender, EventArgs e) DisplayImages imageform = new DisplayImages(); imageform.StartPosition = FormStartPosition.CenterScreen; imageform.Show(); #endregion 4.将数据库内容导出为excel #region 导出 excel private void button5_Click(object sender, EventArgs e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - string filename = ; string savefilename = ; SaveFileDialog savedig = new SaveFileDialog(); savedig.DefaultExt = xlsx; savedig.Filter = Excel文件|*.xlsx; savedig.FileName = filename; savedig.ShowDialog(); savefilename = savedig.FileName; if (savefilename.IndexOf(:) 0) return; Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp = null) MessageBox.Show( 无法创建 excel对象,请确认 excel环境是否正常 ); return; Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets1;/ 取得 sheet1 /写入标题 for (int i = 0; i dataGridView1.ColumnCount; i+) worksheet.Cells1, i + 1 = dataGridView1.Columnsi.HeaderText; /写入数值 for (int r = 0; r dataGridView1.Rows.Count; r+) for (int i = 0; i dataGridView1.ColumnCount; i+) worksheet.Cellsr + 2, i + 1 = dataGridView1.Rowsr.Cellsi.Value; System.Windows.Forms.Application.DoEvents(); worksheet.Columns.EntireColumn.AutoFit();/列宽自适应 MessageBox.Show(filename + 导出文件成功 , 提示, MessageBoxButtons.OK); if (savefilename != ) try 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - workbook.Saved = true; workbook.SaveCopyAs(savefilename); /fileSaved = true; catch (Exception ex) /fileSaved = false; MessageBox.Show( 导出文件时出错 ,文件可能正被打开! n + ex.Message); xlApp.Quit(); GC.Collect();/强行销毁 #endregion 完整代码如下:1. form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using System.IO; using System.Data.OleDb; using Kribo.StoringImages; using excel = Microsoft.Office.Interop.Excel; namespace dbtest public partial class Form1 : Form #region 定义变量 /连接成功标志 public bool linkflag=false; /存储连接 sql 的数据 public string connectstring = ; /连接数据库表的命令 public string commandstring = ; string sqlnameip, sqldb, sqluid, sqlpwd; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - /dateset是一个可以存放多个表的集合,查询结果会以表的形式保存在里面需要 using system.data.sqlclient; DataSet ds = new DataSet(); /一个 DataTable就是一个表,等会用来获取查询的结果 DataTable dt = new DataTable(); /SELECT * FROM sysobjects WHERE (xtype = U) 查看数据库中有多少个表 /查看所有数据库 :select name from sys.databases int recordcount = 1000; / 每次读取 1000条记录 SQLbase datacon = new SQLbase();/ 声明 sqlbase类的一个对象,以调用其方法 struct recordstru / 数据库 记录集合 public string recordname; public recordstru(int num) recordname = new stringnum; ; #endregion #region 初始化控件 public Form1() InitializeComponent(); #endregion #region 初始化 sql,连接 ip 地址,也可以用于读取某数据库有多少个数据表 initdb / if dbname is null ,then return system_db_name /else connect dqlname(ip),connect dbname return tablename of dbname public bool initdb(string sqlname/*sqlserver ip */,string dbname /*database name */,int bz) /如果数据库名称为空,返回数据库的所有名称; if (dbname = ) connectstring = server = + sqlname + ;database=master;uid=sa;pwd=; commandstring = select name from sysdatabases; try 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - string yg_code = 1; /这里是定义了一个参数数组,不过里面就一条参数 SqlParameter parameters = new SqlParameter(yh_code, yg_code) ; /这个 SqlDataAdapter很强大,与数据库的交互就靠它来实现的 /在初始化时把 sqlCommand,connString传入设计好的构造器 SqlDataAdapter Adapter = new SqlDataAdapter(commandstring, connectstring); /将参数加入到 Adapter中 Adapter.SelectCommand.Parameters.AddRange(parameters); /这句话就是集执行查询和保存功能于一体的核心语句了 /简单来说就是执行了sqlCommand里的查询语句,并且把结果以表的形式存在了 ds里面 ds.Clear(); dt.Clear(); Adapter.Fill(ds); /把 ds表集合里的第一个表复制给dt dt = ds.Tables0; /dr.Close();/关闭执行 /con.Close();/ 关闭数据库 int count = dt.Columns.Count;/ 一条记录包含的列数; int rows = dt.Rows.Count;/ 记录个数 Console.WriteLine(查找到记录个数: 0, 每条记录有 1 个字段 , rows, count); recordstru myrec = new recordstru(1000); /string tmp = ; int i = 0; while (i+ rows) listBox1.Items.Add(dt.Rowsi0.ToString(); catch (Exception ex) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - Console.WriteLine(ex.Message); else connectstring = server =+sqlname+;database=+dbname+;uid=sa;pwd=; if(bz=0) commandstring = SELECT * FROM sysobjects WHERE (xtype = U); else commandstring = dbname; try string yg_code = 1; /这里是定义了一个参数数组,不过里面就一条参数 SqlParameter parameters = new SqlParameter(yh_code, yg_code) ; /这个 SqlDataAdapter很强大,与数据库的交互就靠它来实现的 /在初始化时把 sqlCommand,connString传入设计好的构造器 SqlDataAdapter Adapter = new SqlDataAdapter(commandstring, connectstring); /将参数加入到 Adapter中 Adapter.SelectCommand.Parameters.AddRange(parameters); /这句话就是集执行查询和保存功能于一体的核心语句了 /简单来说就是执行了sqlCommand里的查询语句,并且把结果以表的形式存在了 ds里面 ds.Clear(); dt.Clear(); Adapter.Fill(ds); /把 ds表集合里的第一个表复制给dt dt = ds.Tables0; /dr.Close();/关闭执行 /con.Close();/ 关闭数据库 int count = dt.Columns.Count;/ 一条记录包含的列数; int rows = dt.Rows.Count;/ 记录个数 Console.WriteLine(查找到记录个数: 0, 每条记录有 1 个字段 , rows, count); recordstru myrec = new recordstru(1000); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - - - - - string tmp = ; int i = 0; listBox2.Items.Clear(); while (i+ rows) tmp = ; listBox2.Items.Add(dt.Rowsi0.ToString(); /Console.WriteLine(dt.Rowsi0.ToString(); catch (Exception ex) return false; #endregion #region 打开数据库表 public string open_table(string sqlname/*sqlserver ip */, string dbname /*database name */, string tablename,string bz/*0- 表头, 1-表的内容 */) string retstr = ; /dataGridView1.DataSource = ; DataSet ds1 = new DataSet(); /一个 DataTable就是一个表,等会用来获取查询的结果 DataTable dt1 = new DataTable(); connectstring = server = + sqlname + ;database= + dbname + ;uid=sa;pwd=; if(bz!= ) commandstring = bz+tablename; else commandstring = SELECT name FROM syscolumns WHERE (id = OBJECT_ID(+tablename + ); try string yg_code = 1; /这里是定义了一个参数数组,不过里面就一条参数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 21 页 - - - - - - - - - SqlParameter parameters = new SqlParameter(yh_code, yg_code) ; /这个 SqlDataAdapter很强大,与数据库的交互就靠它来实现的 /在初始化时把 sqlCommand,connString传入设计好的构造器 SqlDataAdapter Adapter = new SqlDataAdapter(commandstring, connectstring); /将参数加入到 Adapter 中 Adapter.SelectCommand.Parameters.AddRange(parameters); /这句话就是集执行查询和保存功能于一体的核心语句了 /简单来说就是执行了sqlCommand里的查询语句,并且把结果以表的形式存在了 ds里面 ds1.Clear(); dt1.Clear(); Adapter.Fill(ds1); /把 ds表集合里的第一个表复制给dt dt1 = ds1.Tables0; /dr.Close();/关闭执行 /con.Close();/ 关闭数据库 int count = dt1.Columns.Count;/ 一条记录包含的列数; int rows = dt1.Rows.Count;/ 记录个数 /Console.WriteLine(查找到记录个数: 0, 每条记录有 1 个字段 , rows, count); recordstru myrec = new recordstru(1000); string tmp = ; int i = 0; if(bz!= ) for (i = 0; i rows; i+) dataGridView1.Rows.Add(); dataGridView1.AutoResizeColumns(); this.dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText; dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.LemonChiffon;/ 奇数行背景色 dataGridView1.BackgroundColor = Color.White;/控件背景色 /填充数据 for (i = 0; i rows; i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 21 页 - - - - - - - - - for (int k = 0; k count; k+) dataGridView1.Rowsi.Cellsk.Value = dt1.Rowsik.ToString(); /Console.WriteLine(dt1.Rowsik.ToString(); dataGridView1.Rowsi.HeaderCell.Value = i.ToString(G5); dataGridView1.RowHeadersWidth = 60; return ; /dataGridView1.AutoResizeColumns(); else /根据返回结果首先初始化表格控件 dataGridView1.ColumnCount = rows; dataGridView1.Rows.Clear(); for (i = 0; i rows; i+) dataGridView1.Columnsi.Name = dt1.Rowsi0.ToString(); /Console.WriteLine(dt1.Rowsi0.ToString(); retstr = retstr + dt1.Rowsi0.ToString() + ,; retstr = retstr.Substring(0,retstr.Length - 1); return select + retstr + from ; / catch (Exception ex) return ; #endregion #region 读取选择的数据库,将数据库中包含的表加入到listbox2 中 private void listBox1_DoubleClick(object sender, EventArgs e) string s = ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 21 页 - - - - - - - - - s = listBox1.SelectedItem.ToString(); initdb(textBox1.Text, s,0); #endregion #region 连接数据库 private void button1_Click(object sender, EventArgs e) initdb(textBox1.Text, textBox2.Text.ToString(),0); #endregion #region 读取某表的内容 private void listBox2_DoubleClick(object sender, EventArgs e) string s = ; string s1 = ; s = listBox1.SelectedItem.ToString(); s1 = listBox2.SelectedItem.ToString(); string retstr = open_table(textBox1.Text, s, s1, ); open_table(textBox1.Text, s, s1,retstr); #endregion #region 读取 access 数据库 private void button2_Click(object sender, EventArgs e) try string mypath = Application.StartupPath + mydata.accdb; / 连接数据库的路径及数据库名 if (!File.Exists(mypath) /判断文件是否存在 MessageBox.Show(mypath + 文件未找到! ); return; else Console.WriteLine(mypath); string constr = Provider = Microsoft.ACE.OLEDB.12.0; Data Source = + mypath; /生成连接数据库字符串 OleDbConnection mycon = new OleDbConnection(constr); / 定义OleDbConnection对象实例并连接数据库名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 21 页 - - - - - - - - - string mysql = select * from mytable; /Sql查询语句 OleDbDataAdapter myada = new OleDbDataAdapter(mysql, mycon); /定义 OleDbDataAdapter对象实例并连接数据库表 DataSet myds = new DataSet(); / 定义 DataSet对象实例 myada.Fill(myds); / 填充数据集 dataGridView1.DataSource = myds.Tables0.DefaultView; / 连接数据表格,显示数据 mycon.Close(); / 关闭 OleDbConnection对象实例 mycon.Dispose(); / 释放 OleDbConnection对象实例所占资源空间 catch return; #endregion #region 连接 sqllite 数据库 private void button3_Click(object sender, EventArgs e) DisplayImages imageform = new DisplayImages(); imageform.StartPosition = FormStartPosition.CenterScreen; imageform.Show(); #endregion #region 使用 sqlbase 类,访问 sql数据库 private void button4_Click(object sender, EventArgs e) /* /使用 getds 访问表的数据; DataSet myds = datacon.getds(select * from 遥测参数表 ,遥测参数表 ); /数据存在 myds.table0 int count = myds.Tables.Count; dataGridView1.DataSource = myds.Tables0; dt = myds.Tables0; /下面可以使用 dtik 来得到具体的数据; /使用 getcom 执行语句 datacon.getcom(update 厂站参数表 set 事故总标志 =0 ); */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -