1. 程式人生 > >ADONET連線

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   [email protected] and [email protected]";   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()