zoukankan      html  css  js  c++  java
  • ADONET连接

    一、ADONET连接:  1、//实现了IDisposible接口的对象都可以用using进行回收    

       //ExecuteNonQuery一般用来执行Update、Delete、Insert语句  using(SqlConnection conn = new SqlConnection(   @"Data Source = .;Initial Catalog=mydb;User ID=sa;Password=700513"  ))  {   conn.Open();   using(SqlCommand cmd = conn.CreateCommand())   {    cmd.CommandText = "Insert into T_Student(Name,Age) values('元芳',200)";    cmd.ExecuteNonQuery();   }  }

     2、//查找,ExecuteScalar 一般用来执行有且只有一行一列返回值得SQL语句             using (SqlConnection conn = new SqlConnection(@"Data Source = .; Initial Catalog=tempdb;User ID=sa;Password=700513"))             {                 conn.Open();                 using (SqlCommand cmd = conn.CreateCommand())                 {                     cmd.CommandText = "select count(*) from T_Student";                     int  i = (int)cmd.ExecuteScalar();                     MessageBox.Show(i + "条数据");                 }             }  

    3、如何获得刚插入一行记录的Id号(获得自增字段的值)  insert into T_Student(Name,Age) output inserted.Id values('aaa',123)

     4、执行查询时,有多行结果集用executeReader:  using (SqlConnection conn = new SqlConnection("Data Source=.;Initial             Catalog=tempdb;User ID=sa;Password=700513"))             {                 conn.Open();                 using (SqlCommand cmd = conn.CreateCommand())                 {                     cmd.CommandText = "select * from T_Student";                     using (SqlDataReader reader = cmd.ExecuteReader())                     {                         while (reader.Read())                         {                             long id = reader.GetInt64(0);                             string name = reader.GetString(1);                             MessageBox.Show(id + "," + name);                         }                     }

                    }             }  

    5、SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放到程序中的,而是放到数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。  SqlDataReader对于小数据量的数据来书带来的只有麻烦。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。  DataSet dataset = new DataSet();  SqlDataAdapter adapter = new SqlDataAdapter(cmd);  adapter.Fill(dataset);  DataSet包含若干表Data Table,Data Table包含若干行DataRow。  foreach(DataRow row in dataset.Tables[0].Rows) row["Name"]。    连接实例:  using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=tempdb;User ID=sa;Password=700513"))             {                 conn.Open();                 using (SqlCommand cmd = conn.CreateCommand())                 {                     cmd.CommandText = "select * from T_Student where Age<@aaa";                     cmd.Parameters.Add(new SqlParameter("@aaa", 100));                     //SqlDataAdapter是一个把SqlCommand查询结果填充到DataSet中的类                     SqlDataAdapter adapter = new SqlDataAdapter(cmd);                     //DataSet 相当于本地一个复杂的集合(List<string>)                     DataSet dataset = new DataSet();                     adapter.Fill(dataset);                     DataTable table = dataset.Tables[0];                     DataRowCollection rows = table.Rows;                     for (int i = 0; i < rows.Count; i++)                     {                         DataRow row = rows[i];                         int age = (int)row["Age"];                         string name = (string)row["Name"];                         MessageBox.Show(age+"--"+name);                     }                 }             }

    二、连接字符串的配置化:  将连接字符串写在代码中的缺点:多次重负,如果要修改连接字符串就要修改代码。将连接字符串写在App.Config中:

     1、在App.Config中添加connectionStrings段,添加一个add项,用name属性起一个名字(比如DbConnStr),connectionString属性指定连接字符串。

     2、在“引用”节点上点右键“添加引用”,找到System.configuration。不是所有.Net中的类都能直接调用,类所在的Assembly要被添加到项目的引用中才可以。

     3、ConfigurationManager》ConnectionStrings["DbConnStr"].ConnectionString得到连接字符串。

     4、如何在部署的程序中修改配置  实例:  string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString;

    四、当有多条查询结果时,用ExecuteReader():   using (SqlConnection conn = new SqlConnection (@"Data Source=.;Initial Catalog=AdventureWorks;User ID=sa;Password=700513"))             {                 conn.Open();                                using( SqlCommand cmd = conn.CreateCommand())                 {                     cmd.CommandText = "select * from T_Student";                     using(SqlDataReader reader = cmd.ExecuteReader())    {     while(reader.Read())      {       string name = reader.GetString(1);       int age = reader.GetInt32(2);       MessageBox.Show(name+","+age);      }    }                 }             }

    五、查询参数:  拼接SQL会造成注入漏洞攻击。  SQL语句使用@UserName表示“此处用参数代替”,向SqlCommand的Parameters中添加参数:   cmd.CommandText = "select * from T_Users where   UserName=@UserName and Password=@Password";   cmd.Parameters.Add(new SqlParameter("@UserName","admin"));   cmd.Parameters.Add(new SqlParameter("@Password","password"));

    六、设计用户登录:  

    1、用户数据库字段  Id、UserName、Password、ErrorTimes  

    2、数据导入:从文本文件导入用户信息。易错点:Parameter的重复添加。  File.ReadAllLines()

     3、数据导入:将用户信息导出到文本文件。File.WriteAllLines()

  • 相关阅读:
    毫秒时间格式转换
    Gulp前端服务器本地搭建
    前端构建工具Gulp的学习和使用
    Grunt入门学习之(3) -- Gruntfile具体示例
    Grunt入门学习之(2) -- Gruntfile的编写
    Grunt入门学习之(1) -- 环境安装
    toLocaleTimeString()方法在IE和谷歌浏览器上 根据本地时间格式,把 Date 对象的时间部分(不含日期)转换为“时间字符串”存在区别
    zTree 学习笔记之(一)
    C语言 在VS环境下一个很有意思的报错:stack around the variable was corrupted
    C#.Net 调用方法,给参数赋值的一种技巧
  • 原文地址:https://www.cnblogs.com/mqkmwd/p/10204317.html
Copyright © 2011-2022 走看看