C#操作MYSQL数据库
目录
1、准备步骤
2、MYSQL操作流程
3、MYSQL的C#中的类
4、简单实例
总结:可以把对数据库的操作写成一个个的函数,写到一个helpsql类中,到时候使用的时候就可以直接调用,MYSQL和SQL SERVER 操作是一样的,只不过就是MYSQL要自己下载API 接口,SQL SERVER 不用下载,其他的操作都是一样的。花了一个的时间写,写博客真是累啊,写博客要趁热打铁,昨晚项目后要马上开始记录,不要拖,不然就当时候忘了又要重新开始。还有碰的很好的博客,可以转载过来当做资料开看,应该要对照着他的思路,自己做一遍,而不是看懂就行了,知易行难啊!!!!
1、准备步骤
1.网上下载MySql.Data.dll
2.在项目当中添加引用MySql.Data.dll
3.在操作类当中添加:
using MySql.Data;
using MySql.Data.MySqlClient;
2、MYSQL操作流程
第一步:使用SqlConnection对象连接数据库
第二步:建立SqlCommand对象,执行SQL语句
第三步:对SQL语句执行后的结果进行操作
对返回的结果分为两类
一、用SqlDataReader直接一行一行的读取数据集;
二、DataSet联合DataAdapter来操作数据库
3、MYSQL的C#中的类
1、SqlConnection类
构造函数:SqlConnection(connstr);
属性: Database//获取当前数据库或连接打开后要使用的数据库的名称
Connectionstring//获取或设置用于打开 SQL Server 数据库的字符串
方法: Open()
Close()
Dispose()//释放所有资源
2、SqlCommand类
构造函数:SqlCommand(string,conn)
属性: CommandType//获取或设置一个值,该值指示如何解释 CommandText 属
CommandText //获取或设置要对数据源执行SQL 语句
Connection//获取或设置 SqlCommand 的此实例使用的 SqlConnection
Parameters//获取 SqlParameterCollection。参数集合
方法: ExecuteNonQuery(): 返回受影响函数,如增、删、改操作;
ExecuteScalar():执行查询,返回首行首列的结果;
ExecuteReader():返回一个数据流(SqlDataReader对象)。
实例1:
SqlCommand cmd = new SqlCommand ()
cmd.connection =conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText ="select *from produce=@ID";
cmd.Parameters.Add("@ID",SqlDBType.NVarChar,10,ID).values=1;
cmd.ExecuteScalar();
实例2:
SqlCommand cmd = new SqlCommand (“select *from test”,conn);
cmd.ExecuteScalar();
注意: ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1,对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了,
3、SqlDataReader类
是由ExecuteReader()返回一个数据流(SqlDataReader对象)没有构造方法
属性:Connection//获取与 SqlDataReader 关联的 SqlConnection。
FieldCount//获取当前行中的列数。
HasRows//获取一个值,该值指示 SqlDataReader 是否包含一行或多行
RecordsAffect//获取执行 Transact-SQL 语句所更改、插入或删除的行数
方法:Read();//使 SqlDataReader 前进到下一条记录
GetType();//获取当前实例的 Type
NextResult();//当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果
4、SqlDataApater类
构造方法:SqlDataApater()
SqlDataAdapter(SqlCommand)//初始化 SqlDataAdapter 类的新实例,用指定的 SqlCommand 作为 SelectCommand 的属性。
SqlDataApater(string,conn)//使用 SelectCommand 和 SqlConnection 对象初始化 SqlDataAdapter 类的一个新实例
属性: DeleteCommand
SelectCommand
InsertCommand
UpdataCommand
方法: Fill(DataSet)//在 DataSet 中添加或刷新行
Fill(DataTable)//在 DataSet 的指定范围中添加或刷新行,以与使用 DataTable 名称的数据源中的行匹配。 (继承自DbDataAdapter。
Update(DataRow[])//通过为 DataSet 中的指定数组中的每个已插入、已更新或已删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值
Update(DataSet)//通过为指定的 DataTable 中的每个已插入、已更新或已删除的行执行相应的 INSERT、UPDATE 或 DELETE 语句来更新数据库中的值
实例1
// 隐藏了SqlCommand对象的定义,同时隐藏了SqlCommand对象与SqlDataAdapter对象的绑定
SqlDataAdapter myda= new SqlDataAdapter("select * from test",conn);
实例2
SqlCommand mySqlCommand = new SqlCommand();// 创建SqlCommand
mySqlCommand.CommandType = CommandType.Text;
mySqlCommand.CommandText = "select * from product";
mySqlCommand.Connection = sqlCnt;
SqlDataAdapter myDataAdapter = new SqlDataAdapter(); // 创建SqlDataAdapter
myDataAdapter.SelectCommand = mySqlCommand; // 为SqlDataAdapter对象绑定所要执行的SqlCommand对象
5、DataSet类
命名空间:System.Data.DataSet。
数据集,本地微型数据库,可以存储多张表。
//使用DataSet第一步就是将SqlDataAdapter返回的数据集(表)填充到Dataset对象中:
SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet(); // 创建DataSet myDataAdapter.Fill(myDataSet, "product"); // 将返回的数据集作为“表”填入DataSet中,表名可以与数据库真实的表名不同,并不影响后续的增、删、改等操作
//访问dataset中的数据
DataTable myTable = myDataSet.Tables["product"]; foreach (DataRow myRow in myTable.Rows) { foreach (DataColumn myColumn in myTable.Columns) { Console.WriteLine(myRow[myColumn]); //遍历表中的每个单元格 } }
// 修改DataSet DataTable myTable = myDataSet.Tables["product"]; foreach (DataRow myRow in myTable.Rows) { myRow["name"] = myRow["name"] + "商品"; } // 将DataSet的修改提交至“数据库” SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product");
// 添加一行 DataRow myRow = myTable.NewRow(); myRow["name"] = "捷安特"; myRow["price"] = 13.2; //myRow["id"] = 100; id若为“自动增长”,此处可以不设置,即便设置也无效 myTable.Rows.Add(myRow); // 将DataSet的修改提交至“数据库” SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product");
// 删除第一行 DataTable myTable = myDataSet.Tables["product"]; myTable.Rows[0].Delete(); SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); myDataAdapter.Update(myDataSet, "product");
4、简单的例子
简单实例1:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using MySql.Data; 6 using MySql.Data.MySqlClient; 7 8 namespace mysqltest 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 string connstr = "Server=localhost;Uid=root;Pwd=mhl83905590;Database=yuangong"; 15 using (MySqlConnection conn = new MySqlConnection(connstr)) 16 { 17 try 18 { 19 conn.Open(); 20 MySqlCommand cmd = new MySqlCommand("select * from yg_table", conn); 21 MySqlDataReader reader = cmd.ExecuteReader(); 22 int j = reader.FieldCount; 23 for (int i = 0; i < j; i++) 24 { 25 Console.Write(reader.GetName(i)); 26 Console.Write("\t"); 27 } 28 Console.Write("\n"); 29 Console.Write(reader.GetType()+"\n"); 30 31 while (reader.Read()) 32 { 33 if (reader.HasRows) 34 { 35 for (int i = 0; i < j; i++) 36 { 37 Console.Write(reader[i]); 38 Console.Write("\t"); 39 40 } 41 Console.Write("\n"); 42 } 43 } 44 45 reader.Close(); 46 } 47 catch (MySqlException ex) 48 { 49 Console.Write(ex.ToString()); 50 51 } 52 finally 53 { 54 conn.Close(); 55 } 56 57 } 58 59 } 60 } 61 }
简单实例2:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using MySql.Data; 6 using MySql.Data.MySqlClient; 7 using System.Data; 8 9 namespace mysqltest 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 string connstr = "Server=localhost;Uid=root;Pwd=mhl83905590;Database=yuangong"; 16 using (MySqlConnection conn = new MySqlConnection(connstr)) 17 { 18 try 19 { 20 conn.Open(); 21 MySqlDataAdapter adapter = new MySqlDataAdapter("select * from yg_table", conn); 22 23 DataSet ds = new DataSet(); 24 25 adapter.Fill(ds, "yg_table"); 26 27 DataTable mytable = ds.Tables["yg_table"]; 28 for (int i = 0; i < 5;i++ ) 29 Console.Write(mytable.Columns[i].ColumnName+"\t"); 30 Console.Write("\n"); 31 32 foreach (DataRow myRow in mytable.Rows) 33 { 34 foreach (DataColumn myColumn in mytable.Columns) 35 Console.Write(myRow[myColumn]+"\t"); 36 Console.Write("\n"); 37 } 38 Console.Write(mytable.TableName+"\n"); 39 40 //修改 41 //foreach (DataRow myRow in mytable.Rows) 42 //{ 43 // myRow["name"] = "小明"; 44 //} 45 //MySqlCommandBuilder mycmdbuilder = new MySqlCommandBuilder(adapter); 46 //adapter.Update(ds, "yg_table"); 47 48 //增加一行 49 //DataRow mynewRow = mytable.NewRow(); 50 //mynewRow["id"] = 6; 51 //mynewRow["name"] = "小雷"; 52 //mynewRow["sex"] = "女"; 53 //mynewRow["age"] = 12; 54 //mynewRow["menoy"] = 12; 55 //mytable.Rows.Add(mynewRow); 56 //MySqlCommandBuilder mycmdbuilder = new MySqlCommandBuilder(adapter); 57 //adapter.Update(ds, "yg_table"); 58 59 //删除一行 60 61 mytable.Rows[6].Delete(); 62 MySqlCommandBuilder mycmdbuilder = new MySqlCommandBuilder(adapter); 63 adapter.Update(ds, "yg_table"); 64 65 for (int i = 0; i < 5; i++) 66 Console.Write(mytable.Columns[i].ColumnName + "\t"); 67 Console.Write("\n"); 68 69 foreach (DataRow myRow in mytable.Rows) 70 { 71 foreach (DataColumn myColumn in mytable.Columns) 72 Console.Write(myRow[myColumn] + "\t"); 73 Console.Write("\n"); 74 } 75 76 //MySqlCommand cmd = new MySqlCommand("select * from yg_table", conn); 77 //MySqlDataReader reader = cmd.ExecuteReader(); 78 //int j = reader.FieldCount; 79 //for (int i = 0; i < j; i++) 80 //{ 81 // Console.Write(reader.GetName(i)); 82 // Console.Write("\t"); 83 //} 84 //Console.Write("\n"); 85 //Console.Write(reader.GetType()+"\n"); 86 87 //while (reader.Read()) 88 //{ 89 // if (reader.HasRows) 90 // { 91 // for (int i = 0; i < j; i++) 92 // { 93 // Console.Write(reader[i]); 94 // Console.Write("\t"); 95 96 // } 97 // Console.Write("\n"); 98 // } 99 //} 100 101 //reader.Close(); 102 } 103 catch (MySqlException ex) 104 { 105 Console.Write(ex.ToString()); 106 107 } 108 finally 109 { 110 conn.Close(); 111 } 112 113 } 114 115 } 116 } 117 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。