xywhere 发表于 2013-8-15 21:22:35

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 );            }

cfyrwang 发表于 2013-8-15 23:45:41

挺不错的。。工程实践好像有一课.net。。会有用的,话说,我学的怎么和你的不一样。。

勇敢De面对 发表于 2013-8-16 09:01:31

mark一下呗

阎魔あい 发表于 2013-8-16 10:38:47

知识贴~~~~~~

xywhere 发表于 2013-8-16 19:54:22

阎魔あい 发表于 2013-8-16 10:38
知识贴~~~~~~

能看懂???

terry 发表于 2013-8-16 20:23:27

我也忘了,和java的差不多{:5_156:}

xywhere 发表于 2013-8-16 20:34:39

terry 发表于 2013-8-16 20:23
我也忘了,和java的差不多

高手说话了。。

terry 发表于 2013-8-16 20:38:29

xywhere 发表于 2013-8-16 20:34
高手说话了。。

{:5_142:} 纯小白路过的,高手都去补课了啊。。。。。

xywhere 发表于 2013-8-16 20:44:05

terry 发表于 2013-8-16 20:38
纯小白路过的,高手都去补课了啊。。。。。

高手不要谦虚了。

阎魔あい 发表于 2013-8-17 11:16:21

xywhere 发表于 2013-8-16 19:54
能看懂???

肯定看不懂啊。。。。。我是门外汉

xywhere 发表于 2013-8-17 12:10:45

阎魔あい 发表于 2013-8-17 11:16
肯定看不懂啊。。。。。我是门外汉

恩你是门外的汉子。。

阎魔あい 发表于 2013-8-17 12:55:10

xywhere 发表于 2013-8-17 12:10
恩你是门外的汉子。。

是,,门外的。。。女汉子!!!

terry 发表于 2013-8-17 16:39:23

xywhere 发表于 2013-8-16 20:44
高手不要谦虚了。

{:6_208:},高手都在民间{:6_185:}

xywhere 发表于 2013-8-17 20:39:32

terry 发表于 2013-8-17 16:39
,高手都在民间

。。。。

xywhere 发表于 2013-8-17 20:40:27

阎魔あい 发表于 2013-8-17 12:55
是,,门外的。。。女汉子!!!

抠脚大汉。。

sanjican 发表于 2013-8-17 20:52:38

一点一点积累。。一点一点进化~~

阎魔あい 发表于 2013-8-18 10:44:58

xywhere 发表于 2013-8-17 20:40
抠脚大汉。。

明明貌似很没精神的样子。。。。

xywhere 发表于 2013-8-18 12:02:28

阎魔あい 发表于 2013-8-18 10:44
明明貌似很没精神的样子。。。。

我已不知道咱俩再说什么了。 。。

xywhere 发表于 2013-8-18 12:03:26

sanjican 发表于 2013-8-17 20:52
一点一点积累。。一点一点进化~~

进化。。。

阎魔あい 发表于 2013-8-18 12:23:51

xywhere 发表于 2013-8-18 12:02
我已不知道咱俩再说什么了。 。。

我还知道。。。。是你太累了已经开始机械性的了{:7_279:}

xywhere 发表于 2013-8-18 17:25:28

阎魔あい 发表于 2013-8-18 12:23
我还知道。。。。是你太累了已经开始机械性的了

不累啊 现在还行吧适应了 。。节奏 很好

EagleFlag 发表于 2013-8-23 23:26:39

很不错

xywhere 发表于 2013-8-24 09:19:20

EagleFlag 发表于 2013-8-23 23:26
很不错

没用了
页: [1]
查看完整版本: ADO.Net小总结