ADO.Net小总结
本帖最后由 xywhere 于 2013-8-15 21:25 编辑很久很久不用它了,有些自己都看不懂了,有缘人来拿走吧。
偶然发现的,貌似对数据库最后一个实验有些帮助,对以后软院的.net课程也有一定帮助吧1. 数据库连接-Connnection类://初始化一个Connnection对象using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))//创建命令方法返回一个SqlCommand’SqlCommand cmd = conn.CreateCommand() //打开连接conn.Open(); //关闭连接conn.Close();2. 执行SQL命令-Command类//初始化一个Command对象SqlCommand cmd = conn.CreateCommand();//用查询文本初始化SqlCommand cmd = SqlCommand(string cmdText);//执行查询命令,返回DataReader对象SqlDataReader reader = cmd.ExecuteReader();//执行非查询语句(插入,更新,删除),返回影响行数int i = cmd.ExecuteNonQuery();//执行查询,并返回查询结果集的第一行,第一列,忽略其他行和列,返回类型为Object object o = cmd.ExecuteScalar();3. 提供数据库DataReader 类//执行查询命令,返回DataReader对象SqlDataReader reader = cmd.ExecuteReader();//使 System.Data.SqlClient.SqlDataReader 前进到下一条记录,,如果存在多个行,则为 true;否则为 falsereader.Read();//获取指定列的字符串形式的值。参数:i:从零开始的列序号。reader.GetString (i);//获取列序号,参数为列名reader.GetOrdinal("proId")//i为列号,name为列名,返回值为Object 需要转换object readerobject reader//参数化查询 @后可以随意起名字cmd.CommandText = "select count(*) from table2 where name=@username and password=@password";cmd.Parameters.Add(new SqlParameter("username", username));cmd.Parameters.Add(new SqlParameter("password",password));4 使用配置文件右击->项目->添加新建项->应用程序配置文件,写入以下代码,配置字符串连接<connectionStrings> <add name="Connstr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"/> </connectionStrings>右击->引用->添加引用 System.Configuration 以下为用法//获取连接字符串string connStr=ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString ;//初始化连接using (SqlConnection conn = new SqlConnection(connStr ))5 简化操作创建SQLHelper类class SQLHelper // params可实现多个参数 { //第一个参数sql语句,第二个为可变参数,返回所影响的行数 public static int ExecuteNonQuary(string sql, params SqlParameter[] parameters) { String connStr=ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString ; using (SqlConnection conn = new SqlConnection(connStr )) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } return cmd.ExecuteNonQuery(); } } } public static object ExecuteScalar(string sql, params SqlParameter[] parameters) { string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } return cmd.ExecuteScalar(); } } }* *///这种方法不适合,读取数据不能断开连接 /* public static SqlDataReaderExecuteReader(string sql, params SqlParameter[] parameters) { string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } return cmd.ExecuteReader(); } } } public static DataTableExecuteDataTable (string sql, params SqlParameter[] parameters) { string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; foreach (SqlParameter parameter in parameters) { cmd.Parameters.Add(parameter); } DataSet dataset = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset); return dataset.Tables;; } } } }用法:1.SQLHelper.ExecuteNonQuary("insert into T_person(Name,Age) values(@name,@age)",new SqlParameter("name",name),new SqlParameter("age",age));2.object i= SQLHelper.ExecuteScalar("select count(*) from T_person");3.DataTable table= SQLHelper.ExecuteDataTable("select * from T_person");6. DataAdatp和DataSet 的用法//使用DataSet 对象获取数据string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); DataSet dataset=new DataSet(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from T_person";//DataAdapter 执行命令取出数据 SqlDataAdapter adapter = new SqlDataAdapter(cmd);//填充数据集 adapter.Fill(dataset );//返回数据集中第一个表 DataTable table = dataset.Tables;//返回表中第一列 DataRow row = table.Rows;//打印出列中的Name字段Console.WriteLine(row["Name"]); } }//使用DataApapter 对象更新数据方法1string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); DataSet dataset=new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter();//创建插入命令,也可以创建查询,更新,删除道理一样 adapter.InsertCommand = conn.CreateCommand(); adapter.InsertCommand.CommandText = "insert into T_person(Name,Age) values('abc','123')"; adapter.InsertCommand.ExecuteNonQuery(); }方法2 string connStr = ConfigurationManager.ConnectionStrings["Connstr"].ConnectionString; using (SqlConnection conn = new SqlConnection(connStr)) { conn.Open(); DataSet dataset=new DataSet(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from T_person"; SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dataset ); DataTable table = dataset.Tables; DataRow row = table.Rows; row["Name"] = "jason1235"; //对dataset的修改都是内存中的没有提交到数据库 //用adapter.update(dataset)//SqlCommandBuilder自动生成你要更改数据的Sql语句 SqlCommandBuilder builder = new SqlCommandBuilder(adapter); adapter.Update(dataset); } }7.数据库中空数据在C#中的表示方法int? =null; 加个问号表示可空的int int? i = null; if (i == null) { //int i1 =(int) i; //把可能为空的转换为一定不空的 要强制类型转换 保证不空 Console.WriteLine("i3为空"); } if (i.HasValue) { int i2 = i.Value ;//第二种方法 Console.WriteLine("不为空"); } else { Console.WriteLine("为空"); }8.类型化数据集的用法右击项目->添加->新建项->数据集->然后把一张表拖入数据集中就会自动生成//实例化一个类型化数据集类命名方式为 : 表名+TableAdapterT_personTableAdapter adapter = new T_personTableAdapter();//命名空间.数据集名.表名+DataTable(就是一张表)获取数据 Dataset版登陆.DataSet1.T_personDataTabledata = adapter.GetData();//data.count返回表中行数 for (int i = 0; i < data.Count; i++) {// data;定位所用的行 i代表行数 Dataset版登陆.DataSet1.T_personRowuserRow = data;// userRow.Name 定位所用的字段 Console.WriteLine(userRow.Name ); }
挺不错的。。工程实践好像有一课.net。。会有用的,话说,我学的怎么和你的不一样。。 mark一下呗 知识贴~~~~~~ 阎魔あい 发表于 2013-8-16 10:38
知识贴~~~~~~
能看懂??? 我也忘了,和java的差不多{:5_156:} terry 发表于 2013-8-16 20:23
我也忘了,和java的差不多
高手说话了。。 xywhere 发表于 2013-8-16 20:34
高手说话了。。
{:5_142:} 纯小白路过的,高手都去补课了啊。。。。。 terry 发表于 2013-8-16 20:38
纯小白路过的,高手都去补课了啊。。。。。
高手不要谦虚了。 xywhere 发表于 2013-8-16 19:54
能看懂???
肯定看不懂啊。。。。。我是门外汉 阎魔あい 发表于 2013-8-17 11:16
肯定看不懂啊。。。。。我是门外汉
恩你是门外的汉子。。 xywhere 发表于 2013-8-17 12:10
恩你是门外的汉子。。
是,,门外的。。。女汉子!!! xywhere 发表于 2013-8-16 20:44
高手不要谦虚了。
{:6_208:},高手都在民间{:6_185:} terry 发表于 2013-8-17 16:39
,高手都在民间
。。。。 阎魔あい 发表于 2013-8-17 12:55
是,,门外的。。。女汉子!!!
抠脚大汉。。 一点一点积累。。一点一点进化~~ xywhere 发表于 2013-8-17 20:40
抠脚大汉。。
明明貌似很没精神的样子。。。。 阎魔あい 发表于 2013-8-18 10:44
明明貌似很没精神的样子。。。。
我已不知道咱俩再说什么了。 。。 sanjican 发表于 2013-8-17 20:52
一点一点积累。。一点一点进化~~
进化。。。 xywhere 发表于 2013-8-18 12:02
我已不知道咱俩再说什么了。 。。
我还知道。。。。是你太累了已经开始机械性的了{:7_279:} 阎魔あい 发表于 2013-8-18 12:23
我还知道。。。。是你太累了已经开始机械性的了
不累啊 现在还行吧适应了 。。节奏 很好 很不错 EagleFlag 发表于 2013-8-23 23:26
很不错
没用了
页:
[1]