日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ADO.NET- 基础总结及实例

發布時間:2023/12/19 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ADO.NET- 基础总结及实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、ADO.NET基礎介紹

?(1、程序要和數據庫交互要通過ADO.NET進行,通過ADO.NET就能在程序中執行SQL了。ADO.Net中提供了對各種不同數據庫的統一操作接口。

? ?(2、直接在項目中內嵌mdf文件的方式使用SQL Server數據庫(基于服務的數據庫)。mdf文件隨著項目走,用起來方便,和在數據庫服務器上創建數據庫沒什么區別,運行的時候會自動附加(Attach)。

?(3、雙擊mdf文件會在“服務器資源管理器”中打開,管理方式和在Mnagemen Studio沒什么本質不同,要拷貝mdf?文件需要關閉所有指向mdf文件的連接。

?(4、正式生產運行的時候附加到SQLServer上、修改連接字符串即可,除此之外沒有任何的區別,在“數據庫”節點上點右鍵“附加”;在數據庫節點上à任何à分離?就可以得到可以拷來拷去mdf?文件。

?(5、用的時候要在控制臺、WinForm項目中的Main函數最開始的位置加入“一段神奇的代碼"。ASP.Net項目中不需要

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data.SqlClient; 6 7 namespace myadonet 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //神奇代碼 14 string dateDir = AppDomain.CurrentDomain.BaseDirectory; 15 if (dateDir.EndsWith(@"\bin\Debug\") 16 || dateDir.EndsWith(@"\bin\Release\")) 17 { 18 dateDir = System.IO.Directory.GetParent(dateDir).Parent.Parent.FullName; 19 AppDomain.CurrentDomain.SetData("DataDirectory", dateDir); 20 } 21 22 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True")) 23 { 24 conn.Open(); 25 26 Console.WriteLine("連接成功!"); 27 Console.ReadKey(); 28 } 29 } 30 }

?

2、連接到SQLServer數據庫

? ? ? ?(1、連接字符串:程序通過連接字符串?指定要連哪臺服務器上的、哪個實例的哪個數據庫、用什么用戶名?密碼等。

? ? ? ?(2、項目內嵌mdf文件形式的連接字符串“Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Inte grated Security=True;User Intance=True”。“.SQLEXPRESS”表示本機上的SQLEXPRESS實例,如果數據庫實例名不是SQLEXPRESS,則需要修改。??Database1.mdf”為mdf的文件名。

? ? ? ?(3、ADO.Net中通過SQLConnection在創建SQLServer的連接,SQLConnection代表一個數據庫連接,ADO.Net中的連接等資源都實現了IDisposable接口,可以使用using進行資源管理。執行這段段代碼,如果成功了就OK

? ? ? ?(4、在實現了IDisposable接口的對象,在使用完后需要用行資源釋放

?

3、執行簡單的Insert語句

? ? (1、SQLCommand表示向服務器提交的一個命令(SQL語句等)。

? ? ? (2、CommandText屬性為要執行的SQL語句,Execute NonQuery方法執行一個非查詢語句UpdateinsetDelete等)

? ? ?(3、ExecuteNonQuery返回值是執行的影響行數

在conn.open();下面敲上這樣一段代碼即可插入數據庫數據:

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data.SqlClient; 6 7 namespace myadonet 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //神奇代碼 14 string dateDir = AppDomain.CurrentDomain.BaseDirectory; 15 if (dateDir.EndsWith(@"\bin\Debug\") 16 || dateDir.EndsWith(@"\bin\Release\")) 17 { 18 dateDir = System.IO.Directory.GetParent(dateDir).Parent.Parent.FullName; 19 AppDomain.CurrentDomain.SetData("DataDirectory", dateDir); 20 } 21 22 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True")) 23 { 24 conn.Open(); 25 /* 插入數據* */ 26 using (SqlCommand commd = conn.CreateCommand()) { 27 commd.CommandText = "Insert into T_UserInfo (sUser,sPassWord) values('admin','888888')"; 28 commd.ExecuteNonQuery(); 29 Console.WriteLine("插入成功"); 30 } 31 32 33 } 34 35 Console.WriteLine("連接成功!"); 36 Console.ReadKey(); 37 } 38 } 39 }

?

4、模擬登陸

同樣在conn.open();下面敲上這樣一段代碼即可

View Code 1 bool flag = true; 2 while (flag) 3 { 4 Console.WriteLine("請輸入用戶名:"); 5 string sUser = Console.ReadLine(); 6 using(SqlCommand cmd=conn.CreateCommand()){ 7 cmd.CommandText = "Select * from T_UserInfo where sUser='"+sUser+"'"; 8 using (SqlDataReader reader = cmd.ExecuteReader()) { 9 if (reader.Read()) 10 { 11 Console.WriteLine("請輸入密碼:"); 12 string sPassWord = Console.ReadLine(); 13 string QueryPassWord=reader.GetString(reader.GetOrdinal("sPassWord")); 14 if (sPassWord == QueryPassWord) 15 { 16 Console.WriteLine("登陸成功!"); 17 flag = false; 18 } 19 else { 20 Console.WriteLine("密碼錯誤"); 21 } 22 } 23 else { Console.WriteLine("用戶不存在,請重新輸入"); } 24 } 25 } 26 }

?

5、ExecuteScalar

? ? ? (1、SqlCommand中的ExecuteScalar方法用于執行查詢,并返回查詢所返回的結果集中第一行的第一列,因為不能確定返回值的類型,所以,ExecuteScalar的返回值為object類型

? ? ?(2、得到自動增長字段的主鍵值,在values關鍵詞前加上output inserted.Id,其中Id為主鍵字段名。執行結果就是插入的主鍵值,用ExecuteScalar執行最方便。

?

View Code 1 using (SqlCommand cmd = conn.CreateCommand()) 2 { 3 cmd.CommandText = "Select * from T_UserInfo"; 4 using (SqlDataReader reader = cmd.ExecuteReader()) 5 { 6 while (reader.Read()) //這里得到一個bool值 7 { 8 string sUser = reader.GetString(reader.GetOrdinal("sUser")); 9 //int ID = reader.GetInt32(reader.GetOrdinal("ID")); 10 string sPassWord = reader.GetString(reader.GetOrdinal("sPassword")); //多行結果集 11 Console.WriteLine("{0}{1}", sUser, sPassWord); 12 13 } 14 } 15 }

?

?(3、執行有多行結果集的用?ExecuteReader:讀到最后一條數據返回false

? ? ? ? ??readerGetStringGetInt32等方法只接受整數參數,也就是序號,用GetOrdinal方法根據列名動態得到序號了。

View Code 1 /*最佳登陸方式*/ 2 bool flag = true; 3 while (flag) 4 { 5 Console.WriteLine("請輸入用戶名:"); 6 string sUser = Console.ReadLine(); 7 using (SqlCommand cmd = conn.CreateCommand()) 8 { 9 cmd.CommandText = "Select * from T_UserInfo where sUser='" + sUser + "'"; 10 using (SqlDataReader reader = cmd.ExecuteReader()) 11 { 12 if (reader.Read()) 13 { 14 Console.WriteLine("請輸入密碼:"); 15 string sPassWord = Console.ReadLine(); 16 string QueryPassWord = reader.GetString(reader.GetOrdinal("sPassWord")); 17 if (sPassWord == QueryPassWord) 18 { 19 Console.WriteLine("登陸成功!"); 20 flag = false; 21 } 22 else 23 { 24 Console.WriteLine("密碼錯誤"); 25 } 26 } 27 else { Console.WriteLine("用戶不存在,請重新輸入"); } 28 } 29 } 30 }

?

6、為什么用using?? ? ??

? ? ? ? ?Close:關閉以后還能打開。??Dispose:直接銷毀,不能再次使用。

? ? ? ? ?Using在出了作用域以后調用DisposeSqlConnection?FileStream?等的Dispose內部都會做這樣的判斷:判斷有沒有close,如果沒有,就

CloseDispose

7、SQL注入漏洞攻擊/參數化查詢

? ? ? ?**例如第4點所說的登錄判斷:select count(*)?from T_Users where sUser=…and Password=…,將參數拼到SQL語句中。

? ? ? ? ? ?我們可以通過構造惡意的sPassword輸入 ? ? 1`or`1`=`1

? ? ? ? ? ?編譯通過后識別出來的就是:select count(*) from T_Users where sUser= ‘admin’ and Password=‘1`or`1`=`1’

? ? ? **參數化查詢解決漏洞攻擊

? ? ? ? ? ?SQL語句使用@sUser表示“此處用參數代替”,向SqlCommandParameters中添加參數。

View Code 1 cmd.CommandText = "select count(*)from T_Users where sUser =@UN and sPassword=@PW"; 2 3 cmd.Parameters.Add(new SqlParameter("UN", sUser)); 4 5 cmd.Parameters.Add(new SqlParameter("PW", sPassword));

?

? ? ? ? ? ?參數在SQLServer內部不是簡單的字符串替換,SQLServer直接用添加的值進行數據比較,因此不會有注入漏洞攻擊。

?8、模擬窗體登陸,并且設置登陸錯誤次數

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Data.SqlClient; 10 11 namespace myAdoNet02 12 { 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 private void IntsErrorTime() 21 { 22 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf; 23 Integrated Security=True;Connect Timeout=30;User Instance=True")) 24 { 25 conn.Open(); 26 using (SqlCommand cmd = conn.CreateCommand()) 27 { 28 using (SqlCommand updateCmd = conn.CreateCommand()) 29 { 30 //假如用戶輸入的用戶名和密碼錯誤次數過多,則將數據庫中的錯誤記錄次數加1 31 updateCmd.CommandText = "update T_UserInfo Set sErrorTime=sErrorTime+1 where sUser=@sUser"; 32 updateCmd.Parameters.Add(new SqlParameter("sUser", textBox1.Text)); 33 updateCmd.ExecuteNonQuery(); 34 } 35 } 36 } 37 } 38 private void ResetsErrorTime() 39 { 40 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\UsersDB.mdf; 41 Integrated Security=True;Connect Timeout=30;User Instance=True")) 42 { 43 conn.Open(); 44 using (SqlCommand cmd = conn.CreateCommand()) 45 { 46 using (SqlCommand updateCmd = conn.CreateCommand()) 47 { 48 //假如用戶輸入的用戶名和密碼均正確,則將數據庫的錯誤次數歸0,重新統計。 49 updateCmd.CommandText = "update T_UserInfo Set sErrorTime=0 where sUser=@sUser"; 50 updateCmd.Parameters.Add(new SqlParameter("sUser", textBox1.Text)); 51 updateCmd.ExecuteNonQuery(); 52 } 53 } 54 } 55 } 56 private void button1_Click(object sender, EventArgs e) 57 { 58 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\UsersDB.mdf; 59 Integrated Security=True;Connect Timeout=30;User Instance=True")) 60 { 61 conn.Open(); 62 using (SqlCommand cmd = conn.CreateCommand()) 63 { 64 cmd.CommandText = "Select * from T_UserInfo where sUser=@sUser";//加"@"參數化查詢 65 cmd.Parameters.Add(new SqlParameter("sUser", textBox1.Text)); 66 using (SqlDataReader reader = cmd.ExecuteReader()) 67 { 68 if (reader.Read()) 69 { 70 int errorTimes = reader.GetInt32(reader.GetOrdinal("sErrorTime")); 71 if (errorTimes > 3) 72 { 73 MessageBox.Show("錯誤次數過多,請三小時后再登錄"); 74 return; 75 } 76 string dbpassword = reader.GetString(reader.GetOrdinal("Password")); 77 if (dbpassword == textBox2.Text) 78 { 79 ResetsErrorTime(); 80 MessageBox.Show("登錄成功!"); 81 } 82 else 83 { 84 //在同一個連接中,如果SqlDataReader沒有關閉,那么是不能執行Update之類的語句的, 85 //因此,Update語句要放在其它函數內。 86 IntsErrorTime();//調用此方法即可 87 MessageBox.Show("登錄失敗!"); 88 } 89 } 90 else 91 { 92 MessageBox.Show("用戶名不存在!"); 93 } 94 } 95 } 96 } 97 } 98 } 99 }

?

9、導入導出數據案例

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.IO; 10 using System.Data.SqlClient; 11 12 namespace myAdoNet02 13 { 14 public partial class Form2 : Form 15 { 16 public Form2() 17 { 18 InitializeComponent(); 19 } 20 21 private void button1_Click(object sender, EventArgs e) 22 { 23 //單純從button中的name屬性objImport得到ShowDialog()方法是不科學的 24 // 25 OpenFileDialog objImport = new OpenFileDialog(); 26 if (objImport.ShowDialog() != DialogResult.OK) 27 { 28 return; 29 } 30 using (FileStream filestream = File.OpenRead(objImport.FileName)) 31 { 32 using (StreamReader streamreader = new StreamReader(filestream)) 33 { 34 using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf; 35 Integrated Security=True;Connect Timeout=30;User Instance=True")) 36 { 37 //創建連接是很耗時的,所以不能每插入一條數據就創建一次連接 38 conn.Open(); 39 using (SqlCommand cmd = conn.CreateCommand()) 40 { 41 cmd.CommandText = "insert into T_UserInfo(sUser,sPassWord) values(@sUser,@sPassWord)"; 42 string line = null; 43 while ((line = streamreader.ReadLine()) != null) 44 { 45 string[] str = line.Split('|'); 46 string sUser = str[0]; 47 string sPassWord = str[1]; 48 cmd.Parameters.Clear(); 49 //參數不能重復添加,在本while中用的是同一個SqlCommand對象,所以要在用完一次后,清除參數 50 cmd.Parameters.Add(new SqlParameter("sUser", sUser)); 51 cmd.Parameters.Add(new SqlParameter("sPassWord", sPassWord)); 52 cmd.ExecuteNonQuery(); 53 } 54 } 55 } 56 } 57 MessageBox.Show("導入成功"); 58 } 59 } 60 } 61 }

?

10、手機號碼歸屬地查詢省市下拉列表實例

? ?(1、數據庫資源-全國省市數據庫 :http://www.programfan.com/blog/article.asp?id=28128

? ?(2、數據庫連接:大概有兩種形式

<add key="" value /?
<add name="" connectonstring="" /?
這兩方法對應的后臺訪問方式不一樣的
第一種:System.Configuration.ConfigurationManager.AppSettings["myConn"]
第二種:ConfigurationManager.ConnectionStrings["myConn"].ConnectionString

? ?(3、要在類庫中找到ConfigurationManager.ConnectionStrings需要添加System.configuration

? (4、遇到一個問題,是這樣,因為同一個解決方案里我建立了多個項目,項目中基于數據庫服務文件名字起的差不多(我都是沒改名,自動生成的名字),所以導致后

面在生成調試的時候,總是遇到“數據庫未創建實例”這樣的錯誤。

?下面是手機號碼歸屬地查詢省市下拉列表實例:

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Data.SqlClient; 10 using System.Configuration; 11 12 namespace myAdoNet02 13 { 14 public partial class Form3 : Form 15 { 16 public Form3() 17 { 18 InitializeComponent(); 19 } 20 //初始化 21 22 private void Form3_Load(object sender, EventArgs e) 23 { 24 string myconStr = ConfigurationManager.ConnectionStrings["myConStr"].ConnectionString; 25 26 using (SqlConnection conn = new SqlConnection(myconStr)) 27 { 28 conn.Open(); 29 using (SqlCommand cmd = conn.CreateCommand()) { 30 cmd.CommandText = "select * from promary"; 31 using (SqlDataReader reader = cmd.ExecuteReader()) { 32 while (reader.Read()) { 33 //構造model類 34 Promary p = new Promary(); 35 //將數據庫中的數據賦值給model類中的屬性值 36 p.ID = reader.GetInt32(reader.GetOrdinal("proID")); 37 p.sName = reader.GetString(reader.GetOrdinal("proName")); 38 Console.WriteLine(p.ID); 39 Console.WriteLine(p.sName); 40 Console.WriteLine(p); 41 省.Items.Add(p); 42 } 43 } 44 } 45 } 46 } 47 //選擇省后,查看市 48 private void 省_SelectedIndexChanged(object sender, EventArgs e) 49 { 50 市.Items.Clear();//清楚舊數據 51 Promary p2 = (Promary)省.SelectedItem; 52 int proID = p2.ID; 53 54 string myConStr = ConfigurationManager.ConnectionStrings["myConStr"].ConnectionString; 55 using (SqlConnection conn = new SqlConnection(myConStr)) 56 { 57 conn.Open(); 58 using(SqlCommand cmd=conn.CreateCommand()){ 59 cmd.CommandText = "select * from city where proID=@ID"; 60 cmd.Parameters.Add(new SqlParameter("ID", proID)); 61 using (SqlDataReader reader = cmd.ExecuteReader()) { 62 while (reader.Read()) { 63 string sCityName = reader.GetString(reader.GetOrdinal("cityName")); 64 市.Items.Add(sCityName); 65 } 66 } 67 } 68 } 69 } 70 71 class Promary 72 { 73 //下拉框的DisplayMember要設置為sName,才能顯示出來 74 public string sName { set; get; } 75 public int ID { set; get; } 76 } 77 78 } 79 }

?

配置文件App.config

View Code 1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <connectionStrings> 4 <add name="myConStr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf; 5 Integrated Security=True;Connect Timeout=30;User Instance=True"/> 6 </connectionStrings> 7 </configuration>

?

11、手機號碼歸屬地查詢

?后臺代碼:

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Data.SqlClient; 10 using System.Configuration; 11 using System.IO; 12 13 namespace 手機歸屬地導入查詢 14 { 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 22 private void button1_Click(object sender, EventArgs e) 23 { 24 25 FolderBrowserDialog dlg = new FolderBrowserDialog(); 26 if (dlg.ShowDialog() != DialogResult.OK) 27 { 28 return; 29 } 30 string path = dlg.SelectedPath; 31 //清除數據 32 String connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 33 using (SqlConnection conn = new SqlConnection(connStr)) 34 { 35 conn.Open(); 36 using (SqlCommand cmd = conn.CreateCommand()) 37 { 38 cmd.CommandText = "delete from T_PhoneInfo"; 39 cmd.ExecuteNonQuery(); 40 } 41 } 42 43 44 MessageBox.Show("11!"); 45 string[] files = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories); 46 47 using (SqlConnection conn = new SqlConnection(connStr)) 48 { 49 conn.Open(); 50 using (SqlCommand cmd = conn.CreateCommand()) 51 { 52 cmd.CommandText = "Insert into T_PhoneInfo(sEndNo,sName,sStartNo) values(@sEndNo,@sName,@sStartNo)"; 53 54 foreach (string file in files)//遍歷文件名 55 { 56 string 運營商名稱 = Path.GetFileNameWithoutExtension(file); 57 //不用StreamReader,因為文件很小, 58 string[] lines = File.ReadAllLines(file, Encoding.Default); 59 //一次性加載,也不占多少內存,ReadAllLines默認編碼是UTF-8 60 61 MessageBox.Show("22!"); 62 foreach (string line in lines) 63 { 64 string[] strs = line.Split('-'); 65 string 開始號碼 = strs[0]; 66 string 結束號碼 = strs[1]; 67 string 市 = strs[2]; 68 InsertExecuteNonQuery(結束號碼, 運營商名稱+市, 開始號碼); 69 } 70 } 71 } 72 } 73 MessageBox.Show("導入成功!"); 74 } 75 76 public int InsertExecuteNonQuery(string sEndNo, string sName, string sStartNo) 77 { 78 string sqlString = "Insert into T_PhoneInfo(sEndNo,sName,sStartNo) values(@sEndNo,@sName,@sStartNo)"; 79 String connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 80 81 using (SqlConnection connetion = new SqlConnection(connStr)) 82 { 83 connetion.Open(); 84 using (SqlCommand Command = new SqlCommand(sqlString, connetion)) 85 { 86 SqlParameter[] param = new SqlParameter[] 87 { 88 new SqlParameter("@sEndNo", sEndNo), 89 new SqlParameter("@sName", sName), 90 new SqlParameter("@sStartNo", sStartNo) 91 92 }; 93 Command.Parameters.AddRange(param); 94 return Command.ExecuteNonQuery(); 95 } 96 } 97 } 98 } 99 }

?

program.cs

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Windows.Forms; 5 6 namespace 手機歸屬地導入查詢 7 { 8 static class Program 9 { 10 /// <summary> 11 /// 應用程序的主入口點。 12 /// </summary> 13 [STAThread] 14 static void Main() 15 { 16 //(1)不要忘記把這段代碼放進來 17 //一定要放在最開始,否則提示成功也沒有導入到數據庫中 18 //(2)數據庫表設置主鍵 19 string dataDir = AppDomain.CurrentDomain.BaseDirectory; 20 MessageBox.Show(dataDir); 21 if (dataDir.EndsWith("\\bin\\Debug\\") 22 || dataDir.EndsWith("\\bin\\Release\\")) 23 { 24 //dataDir = System.IO.Directory.GetParent(dataDir).Parent.FullName; 25 dataDir=dataDir.Replace("\\bin\\Debug\\", ""); 26 MessageBox.Show(dataDir); 27 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir); 28 } 29 30 Application.EnableVisualStyles(); 31 Application.SetCompatibleTextRenderingDefault(false); 32 Application.Run(new Form1()); 33 } 34 } 35 }

?

配置文件:
? ?DataDirectory路徑無法讀取到,因為在DBbrowser里的mdf并不是debug中的mdf,所以改成絕對路就可以了

備注:如果配置文件不改為絕對路徑的話,需要改program.cs中

View Code 1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <connectionStrings> 4 <add name="ConnStr" connectionString="Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\phone.mdf; 5 Integrated Security=True;User Instance=True"/> 6 </connectionStrings> 7 </configuration> 8 <!--Connect Timeout=30;-->

?

12、DataSet的基本使用

? (1、封裝一個SQLHelper類:(用于被其它代碼調用,以下為該類的完整代碼)

***1、該類中含有四個方法,分別是:ExecuteNonQuery(string sql, params SqlParameter[] parameters)、ExecuteScalar(string sql, params

SqlParameter[] parameters)、ExecuteReader(string sql, params SqlParameter[] parameters)和ExecuteDataTable(string sql, params

SqlParameter[] parameters)。

在封裝這個類之前稱簡單介紹幾點:

a、封裝一個SQLHelper類方便使用,提供ExecuteNonQuery(string sql, params SqlParameter[] parameters);ExecuteScalar(string sql,

params SqlParameter[] parameters);ExecuteReader(string sql, params SqlParameter[] parameters);ExecuteDataTable(string sql,

params SqlParameter[] parameters)等方法,網上有微軟提供的最全的SQLHelper類,是Enterprise Library中的一部分。

b、用SQLHelper重寫登錄程序

c、new SqlParameter("e",0)的陷阱

d、sqlconnection在程序中一直保持它open可以嗎?對于數據庫來說,連接是非常寶貴的資源,一定要用完不close或dispose。

? ? ? ? ? ?***2、ExecuteScalar 和ExecuteNonQuery的區別

? ? ? ? ? ?a、ExecuteScala 返回r結果集中第一行的第一列或空引用(如果結果集為空),返回的是一個object

? ? ? ? ? ?b、ExecuteNonQuery針對Connection?執行 SQL 語句并返回受影響的行數,返回的是一個int型值。

?SQLHelp.cs

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data.SqlClient; 6 using System.Configuration; 7 using System.Data; 8 9 namespace 封裝 10 { 11 class SQLHelp 12 { 13 public static readonly string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 14 /*優點:1、把數據庫連接代碼都放在SQLHelper中,使代碼更簡潔 15 * 2、使用DataTable可以隨意讀取數據庫,而之前做的用戶登錄使用的SqlReader只能逐行往前讀*/ 16 17 public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) 18 { 19 using (SqlConnection conn = new SqlConnection(connStr)) 20 { 21 conn.Open(); 22 using (SqlCommand cmd = conn.CreateCommand()) 23 { 24 cmd.CommandText = sql; 25 foreach (SqlParameter parameter in parameters) 26 { 27 cmd.Parameters.Add(parameter); 28 } 29 return cmd.ExecuteNonQuery(); 30 } 31 } 32 } 33 34 public static object ExecuteScalar(string sql, params SqlParameter[] parameters) 35 { 36 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 37 using (SqlConnection conn = new SqlConnection(connStr)) 38 { 39 conn.Open(); 40 using (SqlCommand cmd = conn.CreateCommand()) 41 { 42 cmd.CommandText = sql; 43 foreach (SqlParameter parameter in parameters) 44 { 45 cmd.Parameters.Add(parameter); 46 } 47 //執行查詢,并返回查詢所返回的結果集中第一行的第一列。忽略其它的行或列。 48 return cmd.ExecuteScalar(); 49 } 50 } 51 } 52 public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters) 53 { 54 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 55 using (SqlConnection conn = new SqlConnection(connStr)) 56 { 57 conn.Open(); 58 using (SqlCommand cmd = conn.CreateCommand()) 59 { 60 cmd.CommandText = sql; 61 foreach (SqlParameter parameter in parameters) 62 { 63 cmd.Parameters.Add(parameter); 64 } 65 return cmd.ExecuteReader(); 66 } 67 } 68 } 69 public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters) 70 { 71 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 72 using (SqlConnection conn = new SqlConnection(connStr)) 73 { 74 conn.Open(); 75 using (SqlCommand cmd = conn.CreateCommand()) 76 { 77 cmd.CommandText = sql; 78 foreach (SqlParameter parameter in parameters) 79 { 80 cmd.Parameters.Add(parameter); 81 } 82 //執行查詢,并返回查詢所返回的結果集中第一行的第一列。忽略其它的行或列。 83 DataSet dataset = new DataSet(); 84 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 85 adapter.Fill(dataset); 86 return dataset.Tables[0]; 87 } 88 } 89 } 90 } 91 }

?

Form1.cs

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Configuration; 10 using System.Data.SqlClient; 11 using System.IO; 12 using 封裝.DataSet1TableAdapters; 13 14 namespace 封裝 15 { 16 public partial class Form1 : Form 17 { 18 public Form1() 19 { 20 InitializeComponent(); 21 } 22 23 private void button1_Click(object sender, EventArgs e) 24 { 25 //ExecuteNonQuery 插入數據 26 SQLHelp.ExecuteNonQuery("insert into T_PhoneInfo(sStartNo,sEndNo,sName) values(@sStartNo,@sEndNo,@sName)", new SqlParameter("sStartNo", "11"), new SqlParameter("sEndNo", "11"), new SqlParameter("sName", "gaug懂")); 27 MessageBox.Show("插入數據成功"); 28 } 29 30 private void button2_Click(object sender, EventArgs e) 31 { 32 //ExecuteScalar 查詢條數 33 object i = SQLHelp.ExecuteScalar("select count(*)from T_PhoneInfo"); 34 MessageBox.Show(Convert.ToString(i)); 35 } 36 37 private void button3_Click(object sender, EventArgs e) 38 { 39 //SqlDataReader 40 SqlDataReader reader = SQLHelp.ExecuteReader("select * from T_PhoneInfo"); 41 while (reader.Read()) 42 { 43 //運行到這里報錯,因為跟數據庫的連接已關閉,利用DataSet可以解決這類問題 44 string sName = reader.GetString(reader.GetOrdinal("sName")); 45 } 46 } 47 48 private void button4_Click(object sender, EventArgs e) 49 { 50 //注意只有在小數據量的時候才往DataSet里放, 51 //因為DataSet要占內存,大數據量的時候還是要用DataReader 52 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 53 //定義一個DataSet 54 DataSet dataset = new DataSet(); 55 //數據庫操作表 56 using (SqlConnection con = new SqlConnection(connStr)) 57 { 58 con.Open(); 59 using (SqlCommand cmd = con.CreateCommand()) 60 { 61 cmd.CommandText = "select * from T_PhoneInfo"; 62 SqlDataAdapter adapter = new SqlDataAdapter(cmd); //執行select語句(要把cmd傳進去) 63 adapter.Fill(dataset);//將執行結果得到的數據填充到dataset中 64 } 65 } 66 //數據庫操作列 67 ///取dataset的表中的第0條數據 68 DataTable table = dataset.Tables[0]; 69 for (int i = 0; i < table.Rows.Count; i++) 70 { 71 DataRow row = table.Rows[i]; 72 string sName = Convert.ToString(row["sName"]); 73 MessageBox.Show(sName); 74 } 75 } 76 77 private void button5_Click(object sender, EventArgs e) 78 { 79 DataTable table = SQLHelp.ExecuteDataTable("select * from T_PhoneInfo"); 80 for (int i = 0; i < table.Rows.Count; i++) 81 { 82 DataRow row = table.Rows[i]; 83 string sName = Convert.ToString(row["sName"]); 84 MessageBox.Show(sName); 85 } 86 } 87 88 89 90 } 91 }

?

? ? ?(2、利用上述SQLHelper.cs類中的ExecuteDataTable(string sql, params SqlParameter[] parameters)方法,做一個登陸界面

?Form1.cs

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using System.Configuration; 10 using System.Data.SqlClient; 11 using System.IO; 12 using 封裝.DataSet1TableAdapters; 13 14 namespace 封裝 15 { 16 public partial class Form1 : Form 17 { 18 public Form1() 19 { 20 InitializeComponent(); 21 } 22 23 private void button9_Click(object sender, EventArgs e) 24 { 25 //登陸 26 DataTable table = SQLHelp.ExecuteDataTable("select * from T_UserInfo where sUser=@sUser", new SqlParameter("sUser", txtUser.Text)); 27 if (table.Rows.Count <= 0) 28 { 29 MessageBox.Show("用戶名不存在"); 30 } 31 else 32 { 33 //用戶名存在,已經知道是哪一列了,要返回的行是從零開始的索引 34 DataRow row = table.Rows[0]; 35 int sErroTime = Convert.ToInt32(row["sErroTime"]); 36 if (sErroTime > 3) 37 { 38 MessageBox.Show("登陸次數過多"); 39 return; 40 } 41 string sPassWord = Convert.ToString(row["sPassWord"]); 42 if (sPassWord == txtPassWord.Text) 43 { 44 SQLHelp.ExecuteNonQuery("update T_UserInfo set sErroTime=0 where sUser=@sUser", new SqlParameter("sUser", txtUser.Text)); 45 MessageBox.Show("登陸成功"); 46 } 47 else 48 { 49 SQLHelp.ExecuteNonQuery("update T_UserInfo set sErroTime=sErroTime+1 where sUser=@sUser", new SqlParameter("sUser", txtUser.Text)); 50 MessageBox.Show("密碼錯誤!"); 51 } 52 53 } 54 } 55 56 } 57 }

?

? ?(3、

? ? ? ? ? ?**修改DataSet單擊事件如下:

a、可以更新行row["Name"]="sUser"、刪除行datatable.Rows.Remove()、新增行datatable.NewRow()。這一切都是修改的內存中的DataSet,并沒

有修改數據庫。

b、可以調用SqlDataAdapter的Update方法將對DataSet的修改提交到數據庫,Update方法有很多重載方法,可以提交整個DataSet、DataTable

或者若干DataRow。但是需要為SqlDataAdapter提供DeleteCommand、UpdateCommand、InsertCommand它才知道如何將對DataSet的修改提交

到數據庫,由于這幾個Command要求的格式非常苛刻,因此開發人員自己寫非常困難;可以用SqlCommandBuilder自動生成這幾個Command,

SqlCommandBuilder要求表必須有主鍵

c、通過DataRow的RowState可以獲得行的狀態(刪除、修改、新增等);調用DataSet的GetChanges()方法得到變化的結果集,降低傳遞的資源

? ? ? ? ? ?**測試強類型DataSet單擊事件

? ? ? ? ? ? ? ? 敲寫代碼前,還要添加一個數據集DataSet1.xsd文件,然后打開數據集,將表拖到數據集中:

View Code 1 private void button6_Click(object sender, EventArgs e) 2 { 3 //陷阱 4 //實參為0與不為0時,這兩種情況下將光標放在SqlParameter中按F12轉到定義就出現不同的重載函數的情況, 5 //非常詭異類型轉換陷阱! 6 SQLHelp.ExecuteDataTable("select * from T_Users where Id=@Id", new SqlParameter("Id", (object)0)); 7 //修改方法是在0前加上object 8 } 9 10 11 12 private void button7_Click(object sender, EventArgs e) 13 { 14 //修改DataSet 15 DataSet dataset = new DataSet(); 16 string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; 17 using (SqlConnection conn = new SqlConnection(connStr)) 18 { 19 conn.Open(); 20 using (SqlCommand cmd = conn.CreateCommand()) 21 { 22 cmd.CommandText = "select * from T_UserInfo"; 23 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 24 adapter.Fill(dataset); 25 26 //修改Dataset中的數據 27 DataTable talbe = dataset.Tables[0]; 28 DataRow row = talbe.Rows[0]; 29 row["sUser"] = "lcy"; 30 31 talbe.Rows.RemoveAt(1);//刪除一行 32 DataRow otherRow = talbe.NewRow();//新加一行 33 //自動生成更新語句 34 SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 35 //更新DataSet,同步DataSet中的數據到數據庫 36 adapter.Update(dataset); 37 } 38 //對于不返回任何鍵列信息的 SelectCommand,不支持 UpdateCommand 的動態 SQL 生成。 39 //解決方案:表要設置主鍵 40 } 41 42 } 43 44 private void button8_Click(object sender, EventArgs e) 45 { 46 //測試強類型DataSet 47 T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter(); 48 封裝.DataSet1.T_UserInfoDataTable data = adapter.GetData(); //獲取數據 49 50 for (int i = 0; i < data.Count; i++) 51 { 52 封裝.DataSet1.T_UserInfoRow userRow = data[i]; 53 MessageBox.Show(userRow.sUser); 54 } 55 }

?(4 、可空數據類型

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace 可空數據類型 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 string s1 = null; 13 //int i1=null; 14 int? i2 = 0; 15 int? i3 = null;//int? →可空的int,解決數據庫和C#對于int是否可以為null的不同所設置的 16 if (i3 == null) 17 { 18 Console.WriteLine("i3為空"); 19 } 20 else 21 { 22 i3++; 23 int i4 = (int)i3; //將可空的數據賦給不可空的,會報錯,加(int)i3以保證i3一定不為空 24 Console.WriteLine("i3不為空,i3++={0}", i3); 25 } 26 if (i3.HasValue) 27 { 28 int i4 = i3.Value; 29 Console.WriteLine("i3不為空"); 30 } 31 else 32 { 33 Console.WriteLine("i3為空"); 34 } 35 int i6 = 10; 36 int? i5 = i6; //將不可空的賦給可空的,不會報錯 37 } 38 }

?(5、強類型DataSet判斷數據庫字段是否為null,強類型DataSet登陸,數據庫連接的連續性

View Code 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using 封裝.DataSet1TableAdapters; 10 using System.Diagnostics; 11 12 namespace 封裝 13 { 14 public partial class Form2 : Form 15 { 16 public Form2() 17 { 18 InitializeComponent(); 19 } 20 21 private void button1_Click(object sender, EventArgs e) 22 { 23 //判斷數據庫字段是否為空 24 T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter(); 25 封裝.DataSet1.T_UserInfoDataTable table = adapter.GetData(); 26 封裝.DataSet1.T_UserInfoRow row = table[1]; 27 28 if (row.IssPassWordNull()) 29 { 30 table[1].sPassWord = "888888"; 31 adapter.Update(table); 32 MessageBox.Show("密碼為空,已重置密碼"); 33 } 34 else { 35 MessageBox.Show("密碼為:"+table[0].sPassWord); 36 } 37 38 } 39 40 private void button2_Click(object sender, EventArgs e) 41 { 42 //DataSet 密碼登陸 43 T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter(); 44 封裝.DataSet1.T_UserInfoDataTable table = adapter.GetDataByUser(txtUser.Text); 45 46 if (table.Count <= 0) 47 { 48 MessageBox.Show("用戶不存在"); 49 } 50 else { 51 封裝.DataSet1.T_UserInfoRow row = table[0]; 52 if (row.sErroTime > 3) 53 { 54 MessageBox.Show("登陸次數過多"); 55 return; 56 } 57 else { 58 if (row.sPassWord == txtPassWord.Text) 59 { 60 adapter.UpdateErrorTimeBack(row.sUser); 61 MessageBox.Show("登陸成功"); 62 } 63 else { 64 adapter.UpdateErrorTimeAdd(row.sUser); 65 MessageBox.Show("登陸失敗,密碼錯誤"); 66 } 67 } 68 } 69 70 } 71 72 private void button3_Click(object sender, EventArgs e) 73 { 74 75 Stopwatch gameTime = new Stopwatch(); 76 gameTime.Start(); 77 T_UserInfoTableAdapter adapter = new T_UserInfoTableAdapter(); 78 79 /*慢方法:數據連接是間斷的 80 for (int i = 0; i < 3000; i++) 81 { 82 adapter.Insert(i.ToString(),i.ToString(),0); 83 }*/ 84 85 /*快方法:數據連接是連續的*/ 86 adapter.Connection.Open(); 87 for (int i = 0; i < 3000; i++) 88 { 89 //先刪除上個例子的數據 adapter.Delete(i.ToString(), i.ToString(), 0); 90 adapter.Insert(i.ToString(), i.ToString(), 0); 91 } 92 adapter.Connection.Close(); 93 94 gameTime.Stop(); 95 96 MessageBox.Show(gameTime.Elapsed.ToString()); 97 } 98 99 } 100 }

?

?

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/daomul/archive/2013/04/17/3021929.html

總結

以上是生活随笔為你收集整理的ADO.NET- 基础总结及实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

中文字幕高清免费日韩视频在线 | 人人玩人人爽 | 久久久精品亚洲 | 日韩日韩日韩日韩 | 成人黄色短片 | 色婷婷综合久久久中文字幕 | 全黄网站 | 亚洲精品字幕在线观看 | 国产午夜三级一区二区三桃花影视 | 蜜臀av性久久久久av蜜臀三区 | 国产午夜一级毛片 | 91香蕉亚洲精品 | 欧美另类性| 精品视频免费在线 | 亚洲精品视频网站在线观看 | 欧美日韩网站 | 色综合五月 | 色干综合| 久久亚洲免费 | 亚洲国产丝袜在线观看 | 91精品在线播放 | 国产日韩在线观看一区 | 私人av| 久久这里只有精品首页 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 一区二区中文字幕在线 | 精品久久久久久亚洲综合网 | a电影免费看 | 99免费看片 | 伊人av综合| 国产在线精 | 在线观看日韩中文字幕 | 国产在线自| 青青草国产在线 | 国产色婷婷精品综合在线手机播放 | 亚洲欧美精品一区二区 | 91精品视频播放 | www.精选视频.com | 999国产| 在线视频观看亚洲 | 久草视频在线免费看 | 国产精品久久久视频 | 91精品办公室少妇高潮对白 | 久久天堂影院 | 亚洲午夜精品一区二区三区电影院 | 又爽又黄又无遮挡网站动态图 | 久久99日韩 | 视频一区在线免费观看 | 色视频在线免费 | 日本视频精品 | 亚洲免费成人av电影 | 在线观看免费视频 | 亚洲三级视频 | 国产日韩欧美在线看 | 久久精品成人欧美大片古装 | www.色婷婷| 成人国产电影在线观看 | 欧美日本一二三 | 探花视频在线观看免费 | 久av在线 | 国产成人av一区二区三区在线观看 | 深爱激情站 | 国产精品大片免费观看 | 欧美日韩亚洲在线观看 | 日本九九视频 | 91精品国产高清自在线观看 | 五月天亚洲婷婷 | 亚洲欧美视频 | 国产手机在线 | 色多多污污在线观看 | 日本激情动作片免费看 | 亚洲精品一区二区三区在线观看 | 久久久免费看视频 | 亚洲精品一区二区三区高潮 | 国产一线二线三线性视频 | 中文字幕一区在线 | 成人天堂网 | 美州a亚洲一视本频v色道 | 国产黄 | 天天操天天操 | 亚洲一级电影 | 亚洲国产天堂av | 日韩免费三区 | 亚洲专区视频在线观看 | 免费国产在线视频 | 久久免费精彩视频 | 日韩www在线| 日韩av午夜在线观看 | 中文字幕在线观看免费 | 久久国产香蕉视频 | a成人v在线 | 黄色av免费电影 | 久久国色夜色精品国产 | 午夜av在线 | 91字幕| 在线视频手机国产 | 91成人免费 | 四虎在线免费 | 81精品国产乱码久久久久久 | 日韩理论片中文字幕 | 国产成人一二三 | 国产精品免费在线播放 | 色婷婷亚洲婷婷 | 伊人久久一区 | 国产高清无线码2021 | 天堂在线视频免费观看 | 91成人看片 | 9在线观看免费高清完整 | 欧美日韩亚洲第一 | 成人91在线观看 | 国产精品igao视频网入口 | 久久久久久国产一区二区三区 | 亚洲激情中文 | 欧美日韩中 | 亚洲天天在线 | 久久国产一区 | 五月天综合色激情 | 99在线精品视频 | 爱爱av网 | 久久精品视频观看 | 精品一区二区在线看 | 国产精品久久久免费看 | 一区二区精品在线 | 久久综合久久久久88 | 在线播放av网址 | 欧美色伊人 | 久久国产精品99久久久久久老狼 | 中文国产字幕在线观看 | 亚洲欧美日韩国产一区二区三区 | 久久99免费观看 | 成年人电影毛片 | 国产裸体永久免费视频网站 | 日韩精品视频在线观看免费 | 久久久久久影视 | 日韩中文字幕一区 | 国产精品色视频 | 免费色视频网址 | 天天在线视频色 | 91精品电影 | 欧美日本中文字幕 | 天天天天色射综合 | 免费污片 | 欧美日韩三级在线观看 | 国产粉嫩在线观看 | 国产原创在线观看 | 视频一区亚洲 | 欧美一区二区三区在线播放 | 国产91影视| 在线亚洲激情 | 国产福利精品在线观看 | 日韩中文字幕国产 | 欧美福利视频一区 | 国产精品一区二区av日韩在线 | 亚洲精品美女在线观看播放 | 日韩一区二区三区在线观看 | 99在线免费观看视频 | 黄色小说网站在线 | 香蕉视频在线看 | 国产精品美女久久久久久久久久久 | 国产男女无遮挡猛进猛出在线观看 | 97在线观看免费视频 | 在线黄色免费 | 婷婷伊人综合 | 五月天视频网 | 久久精品女人毛片国产 | 久久99在线视频 | 中文字幕在线观看完整版电影 | 中文字幕综合在线 | 日韩久久久久久久久久久久 | 欧美日一级片 | 夜夜躁狠狠躁日日躁 | 99精品99| 欧美美女视频在线观看 | 日韩精品不卡在线观看 | 国产1区在线观看 | 亚洲欧美国产精品 | 久久最新视频 | 中文字幕乱码日本亚洲一区二区 | 久久久www成人免费精品张筱雨 | 色综合欧洲 | 成人av资源网| www.黄色 | 免费午夜在线视频 | 97国产精品亚洲精品 | 午夜婷婷在线播放 | 亚洲视频2 | 91视频下载 | 午夜精品久久久久久中宇69 | 亚洲日本va中文字幕 | 国产视频一区在线免费观看 | 亚洲国产成人久久 | 久久综合色播五月 | 一级黄色a视频 | 欧美久久久久久 | 日韩小视频网站 | 欧美亚洲成人免费 | 久久草av| 亚洲欧美乱综合图片区小说区 | 激情网站五月天 | 欧美在线视频第一页 | 特级黄色一级 | 麻豆视频国产在线观看 | 亚一亚二国产专区 | 911久久香蕉国产线看观看 | 奇米影视在线99精品 | av电影久久 | 国产精品乱码高清在线看 | 九九免费精品视频 | 久久国产成人午夜av影院潦草 | 欧美黄色免费 | 国产精品成久久久久三级 | 精品久久久久久久久久岛国gif | 精品国产福利在线 | 在线观看中文 | 国产韩国精品一区二区三区 | 综合精品久久 | 精品国产美女在线 | 激情综合色综合久久 | 天天干天天摸天天操 | 久久手机免费视频 | 亚洲精品在线观看免费 | 亚洲精品综合一区二区 | 日本丰满少妇免费一区 | 国产探花在线看 | 久久亚洲国产精品 | 国产免费一区二区三区最新 | 久久免费久久 | 成人亚洲精品国产www | 婷婷六月丁香激情 | 久热电影 | 综合久久2023 | 久久公开视频 | 人人澡人人舔 | 久久国产精品久久国产精品 | 永久免费的啪啪网站免费观看浪潮 | 中文不卡视频在线 | 九九热久久免费视频 | 国产午夜精品一区二区三区 | 天天操夜夜操国产精品 | 欧美日韩亚洲国产一区 | 中文字幕亚洲精品日韩 | 亚洲一区二区黄色 | 国产婷婷久久 | 奇米7777狠狠狠琪琪视频 | av黄色av| 99久久精品免费一区 | 国产我不卡 | 国产一级精品绿帽视频 | 国内精品视频免费 | 欧美日韩一区二区免费在线观看 | 国产在线精品国自产拍影院 | 草久草久 | 国产 日韩 在线 亚洲 字幕 中文 | 成人在线视频免费 | 奇米影视在线99精品 | 国产精品乱码一区二三区 | 天天操天天谢 | 久久色中文字幕 | 国产人成免费视频 | 91精品久久久久久综合五月天 | 欧洲激情在线 | 探花在线观看 | www色网站| 正在播放 久久 | 国产精品久久久久久一区二区三区 | 成年人国产视频 | 亚洲男男gaygay无套同网址 | 日一日操一操 | 久久人人爽爽人人爽人人片av | 国产精品123 | 最近中文字幕大全中文字幕免费 | 九九有精品 | 91精品啪在线观看国产线免费 | 久久久国产高清 | 在线观看一区二区视频 | 又黄又爽免费视频 | 日韩欧美精品一区二区 | 日韩激情视频在线观看 | 国产精品av久久久久久无 | av视屏在线播放 | 午夜精品久久久久久 | 欧美精品久久久久性色 | 精品在线视频一区二区三区 | 99视频在线免费观看 | 在线免费观看视频你懂的 | 久久在草 | 国产精品久久久久久久久久尿 | 成年人免费观看在线视频 | 亚洲a成人v| 日韩av手机在线观看 | 国产a级免费| 欧美色精品天天在线观看视频 | 久久99深爱久久99精品 | av片在线看 | 91精品啪在线观看国产81旧版 | 中文字幕中文字幕在线中文字幕三区 | 992tv又爽又黄的免费视频 | 久久综合狠狠 | 国产精品原创视频 | 中文字幕亚洲不卡 | 免费看国产视频 | 在线 你懂 | 欧美一二三区播放 | 国产精品久久久99 | 国产成人一区二区三区免费看 | 国产视频网站在线观看 | bayu135国产精品视频 | 在线免费黄 | 美女视频一区 | 久久久精品综合 | 国产人在线成免费视频 | 国产成人a亚洲精品 | 园产精品久久久久久久7电影 | 精品国产一区二区三区四区vr | 国产精品日韩在线 | 久草在线观看视频免费 | 国产一区二区在线播放视频 | 中文字幕人成人 | 成人免费在线观看av | 在线观看中文字幕dvd播放 | 福利视频一区二区 | 亚洲一片黄| 97电影在线观看 | 91日韩在线 | 久久久久免费网站 | 国产高清免费在线播放 | 一区二区三区中文字幕在线 | 久久久久久久久久久电影 | 97精品国自产拍在线观看 | 亚洲成a人片在线观看网站口工 | 欧美黄色特级片 | 国产精品国产自产拍高清av | 久久人人插 | 欧美大片第1页 | 人人爽人人澡 | 国产福利中文字幕 | 97看片吧| 日韩网站免费观看 | av蜜桃在线 | 六月丁香久久 | 午夜av一区二区三区 | 久久久久久久久久免费 | 亚洲精品视频播放 | 最近乱久中文字幕 | av在线色 | 91污在线 | 亚洲黄色小说网 | 欧美在线视频第一页 | 91麻豆精品 | 国产色在线视频 | 国产精品观看在线亚洲人成网 | 国产精品久久久久久久免费 | 91理论电影 | 亚洲国产中文在线观看 | 国产精品久久久久免费 | 奇米7777狠狠狠琪琪视频 | 久久免费视频2 | 国产精品久久久久永久免费观看 | 日本精品久久久久中文字幕 | 国产精品久久久久久五月尺 | 六月丁香综合网 | 探花视频网站 | 天天色中文 | 天天se天天cao天天干 | 日韩精品一区二区三区不卡 | 天天综合导航 | 国产精品永久久久久久久www | 一区二区三区四区精品视频 | 91成熟丰满女人少妇 | 久草视频视频在线播放 | 午夜国产一区 | 国产69久久久欧美一级 | 国产手机在线观看 | 色播99 | 女女av在线| 欧美日韩国产成人 | 伊甸园永久入口www 99热 精品在线 | 97精产国品一二三产区在线 | 亚洲视频电影在线 | 日韩免费电影一区二区 | 久草精品视频在线观看 | 99热这里有精品 | 成人午夜性影院 | 一色屋精品视频在线观看 | 青青草视频精品 | 超碰在97| 中文字幕一区在线观看视频 | 精品毛片在线 | 日日夜日日干 | 天天射综合网站 | 国产免费黄视频在线观看 | 成人欧美在线 | 国产精品第一 | 在线一区二区三区 | 免费看黄视频 | av888av.com| 国产一区二区电影在线观看 | 国产一区视频在线观看免费 | 三级av网| 色综久久| 久久精品一区二区三区视频 | 九九免费视频 | 国产精品99久久久久久宅男 | 黄色91在线观看 | 国产日女人 | 密桃av在线| 亚洲成色777777在线观看影院 | 93久久精品日日躁夜夜躁欧美 | 91九色国产视频 | 日韩精品视频免费看 | 成年人免费观看国产 | 国产伦理一区二区 | 久久草网 | 国产国产人免费人成免费视频 | 久久夜av| 天天爱天天操 | 夜夜操网| 亚洲一区二区三区四区精品 | 午夜黄色一级片 | 奇人奇案qvod | 韩日精品中文字幕 | 日韩av专区 | 偷拍久久久 | 久久99久久精品国产 | 日韩视频精品在线 | av片一区二区 | 日韩视频免费在线观看 | 99高清视频有精品视频 | 国产成人精品久久亚洲高清不卡 | 久草影视在线观看 | 成全免费观看视频 | 日日夜夜综合网 | 成人免费xxxxxx视频 | 深夜免费福利 | 久久成人免费视频 | 黄色三级在线观看 | 久久精品久久久久电影 | 国产精品一区二区三区99 | 国产精品9999| 欧美国产亚洲精品久久久8v | 99久久婷婷国产 | 91成人免费电影 | 亚洲精品乱码久久久久久 | 黄色大全免费观看 | 日韩在线观看小视频 | 日日夜操 | 91看片淫黄大片在线播放 | 日本中文不卡 | 在线中文字幕av观看 | av青草| 97免费在线观看视频 | 人人爱人人舔 | 国产在线97 | 国产成人久久av | 亚洲国产大片 | 人人玩人人添人人澡97 | 日韩丝袜在线观看 | 久久69av| 激情综合国产 | 激情视频二区 | 深爱开心激情网 | 香蕉网在线播放 | 99久久久久免费精品国产 | 免费欧美 | 国产视频97 | 免费成人av在线 | 91精品福利在线 | 色五丁香 | 久久超碰97 | 日韩av免费大片 | 中文字幕亚洲五码 | 91精品一 | 丝袜美腿在线视频 | 亚洲精品97 | 亚洲女人av | 成人在线观看日韩 | 国产又粗又猛又爽又黄的视频免费 | 国产精品毛片一区二区三区 | 久久激情五月丁香伊人 | 国产在线国偷精品产拍免费yy | 91av官网| 免费污片| 久久国产精品99国产 | 久久久国产网站 | 一区二区三区动漫 | 天天操天天艹 | 精品视频9999 | 国产色就色 | 免费一级特黄毛大片 | 国产在线色 | 欧美aaa一级 | 日韩在线资源 | 久久少妇 | 中文字幕高清在线 | av片一区二区 | 精品亚洲二区 | 久久国内精品99久久6app | av无限看| 激情欧美一区二区免费视频 | 欧美一区二区三区在线视频观看 | 麻豆视频在线免费观看 | 波多野结衣在线中文字幕 | 手机在线小视频 | 热re99久久精品国产66热 | 999久久久久 | 手机av网站 | 国产精品亚洲视频 | 一区二区三区在线免费播放 | 日韩午夜高清 | 久久成人综合视频 | 亚洲欧洲xxxx | 国产亚洲无 | 91高清一区| 欧美另类重口 | 337p日本大胆噜噜噜噜 | 在线观看mv的中文字幕网站 | 国产高清在线免费 | 黄色日批网站 | 91爱爱电影 | 国产一级片网站 | 色综合天天色综合 | 丁香九月激情 | 日韩视频中文字幕 | 国产精品欧美在线 | 人人添人人澡 | 狠狠色丁香婷婷综合欧美 | 玖玖精品视频 | 国内成人精品2018免费看 | 亚洲欧美国内爽妇网 | 国产黄色片免费在线观看 | 国产成人精品久久亚洲高清不卡 | 国产免费嫩草影院 | 五月婷婷导航 | 三级动态视频在线观看 | 亚洲精品观看 | 国产乱视频| 国产在线p | 国产一区二区日本 | 日韩免费电影网 | 亚洲精品五月 | 久久精品79国产精品 | 亚洲人人精品 | 激情深爱 | 精品久久影院 | 精品欧美一区二区在线观看 | 欧美一区二区三区在线视频观看 | 一区二区三区四区五区在线 | 国产激情久久久 | 国产91精品高清一区二区三区 | 中文字幕国产 | 色综合久久久久 | 91精品人成在线观看 | 一区二区三区四区五区在线 | 99久久精品国产一区二区三区 | 一级黄色毛片 | 日韩在线观看一区二区 | 亚洲黄色小说网址 | 91精品国自产在线观看 | 在线色资源 | 热久久电影| 成人宗合网 | 天天干人人| 精品一区精品二区高清 | 69av免费视频 | 五月天六月婷 | 日韩精品视频免费在线观看 | 国产一区二区三区免费在线观看 | 日日碰狠狠躁久久躁综合网 | 欧美一区二区在线免费观看 | 亚洲激情p | 波多野结衣在线播放一区 | 国产精品18久久久久久久 | 久草在线视频网站 | 亚洲精品乱码久久久久久蜜桃不爽 | 精品国产成人在线影院 | 91九色视频导航 | 粉嫩aⅴ一区二区三区 | 正在播放日韩 | 人人舔人人干 | 精品视频免费观看 | 午夜精品久久久久久久久久久久久久 | 成人三级黄色 | av九九九| 大荫蒂欧美视频另类xxxx | 欧美一二三专区 | 久久99国产精品免费 | 又黄又刺激视频 | 中文字幕黄色av | 国产va饥渴难耐女保洁员在线观看 | 色噜噜狠狠狠狠色综合 | 久久精品国产v日韩v亚洲 | 国产视频首页 | 精品久久久久久久久久久久久久久久 | 中国黄色一级大片 | 久久只精品99品免费久23小说 | 人操人 | 91私密视频| 亚洲男男gⅴgay双龙 | 999视频在线播放 | 开心激情网五月天 | 日本乱码在线 | 久久国产精品视频观看 | 一区二区三区中文字幕在线观看 | 国产综合视频在线观看 | 青青河边草观看完整版高清 | 丁香婷婷综合激情 | 婷婷久久五月 | 亚洲精品久久激情国产片 | 国产精品igao视频网入口 | 国产视频欧美视频 | 中文字幕亚洲在线观看 | 日韩电影中文,亚洲精品乱码 | 91精品专区 | 91在线小视频 | 久久精品视频在线观看免费 | 在线有码中文 | 亚洲成人av电影在线 | 精品久久久亚洲 | 免费在线观看一级片 | 在线观看韩日电影免费 | 99这里只有久久精品视频 | a'aaa级片在线观看 | 亚洲精品456在线播放 | 成人免费视频观看 | 一区在线观看 | 97色在线观看免费视频 | 国产欧美精品在线观看 | 伊人天堂av | 亚洲经典中文字幕 | 国产91在线观看 | 成人a级大片 | 国产一区二区日本 | 国产在线欧美日韩 | 亚洲美女精品视频 | 久爱综合 | 久久99久久99精品免视看婷婷 | 国产精品免费高清 | 欧美日韩在线视频免费 | 免费又黄又爽视频 | 成人精品视频久久久久 | 91九色视频观看 | 天天操网址 | av在线免费播放 | 五月激情站 | 欧美中文字幕久久 | av在线不卡观看 | 成人蜜桃视频 | 久久久久久久国产精品视频 | 五月天久久狠狠 | 色婷婷视频在线 | 米奇四色影视 | 亚洲精品中文字幕在线观看 | 日本亚洲国产 | 在线观看91精品视频 | 日韩在线观看第一页 | 91精品国产99久久久久 | 久久电影网站中文字幕 | 人人爽人人射 | 成人av免费在线观看 | 日韩一区二区三区高清在线观看 | 黄色三级免费网址 | 丁香5月婷婷久久 | 波多野结衣在线播放一区 | 中文字幕一区二区三区久久蜜桃 | 亚洲五月激情 | 91一区啪爱嗯打偷拍欧美 | 国产视频不卡一区 | 五月婷婷中文网 | 久久午夜电影院 | 天天操天天色天天射 | 91成人网页版 | 一区二区在线电影 | 国产精品久久9 | 91在线精品秘密一区二区 | 九九久久影视 | 黄色国产成人 | 天天视频色 | 免费看黄的视频 | 免费观看国产精品 | 伊人激情综合 | 日韩在线观看中文字幕 | 日日草天天草 | 麻豆91在线| 精品在线播放 | 国产成人精品免高潮在线观看 | 中文不卡视频 | 在线亚洲免费视频 | 国产亚洲资源 | 免费观看高清 | 91一区在线观看 | 国产精品va在线播放 | 亚洲理论电影 | 国产91在| 久久久免费播放 | 婷婷免费视频 | 日韩av成人在线 | 久久久久久久久久久国产精品 | 日韩在线视频一区二区三区 | 久久国内精品视频 | 国产日韩视频在线播放 | 日本h在线播放 | 五月婷婷开心中文字幕 | 成人av免费| 少妇搡bbbb搡bbb搡忠贞 | 久久久久久在线观看 | 永久免费毛片在线观看 | 免费在线播放视频 | 2019国产精品| 91原创在线观看 | 激情欧美xxxx | 国产露脸91国语对白 | 欧美日韩国产精品一区 | 成人毛片a | 欧美国产高清 | 亚洲成人精品在线观看 | 精品国精品自拍自在线 | 欧美在线观看视频 | 中文字幕在线观看你懂的 | 91精品国产高清自在线观看 | 国产玖玖精品视频 | 丁香婷婷激情啪啪 | 婷婷在线免费视频 | 成人免费观看完整版电影 | 色综合久久88色综合天天人守婷 | 日韩av影视 | 国产精品久久久久三级 | 在线免费av网站 | 午夜婷婷在线播放 | 免费视频成人 | 日韩理论在线播放 | 亚洲永久精品视频 | 欧美福利片在线观看 | 国产一线天在线观看 | 久久五月婷婷丁香社区 | 欧美午夜激情网 | 二区视频在线观看 | 91视频免费网站 | 久久综合视频网 | 福利视频一区二区 | 91亚洲精品久久久久图片蜜桃 | 亚洲欧美色婷婷 | av福利在线导航 | 久草在线精品观看 | 国产精品久久网站 | 欧美日韩超碰 | 亚洲国产成人精品在线 | 国产精品粉嫩 | 中文字幕 第二区 | 狠狠色丁香婷婷综合欧美 | 97成人精品视频在线播放 | 亚洲一区二区三区四区在线视频 | av网站在线观看播放 | 国产精品毛片一区视频 | 色成人亚洲网 | 久久精品永久免费 | 公与妇乱理三级xxx 在线观看视频在线观看 | 日本视频网 | 午夜精品视频一区二区三区在线看 | 国产精品一区免费看8c0m | 激情 一区二区 | 日韩在线免费高清视频 | 黄色毛片视频 | 午夜精品一区二区三区在线 | 国产在线视频一区二区 | 涩涩网站在线 | 日韩精品在线免费播放 | 亚洲欧洲精品久久 | 六月丁香社区 | 99久久精品久久亚洲精品 | 亚洲乱码中文字幕综合 | 免费碰碰 | 精品中文字幕在线 | 天天色天天操天天爽 | 超碰在线99 | 色先锋av资源中文字幕 | 国产午夜精品一区二区三区嫩草 | 欧美一级视频免费看 | 91片黄在线观看动漫 | 久久影院中文字幕 | 久久综合精品国产一区二区三区 | 一区二区三区国产欧美 | 超级碰碰碰免费视频 | 久久成人欧美 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 在线观看岛国 | 国产在线不卡精品 | 久久91久久久久麻豆精品 | 国产亚洲精品综合一区91 | 日本不卡视频 | 欧美日产一区 | 日韩av片免费在线观看 | 激情五月在线观看 | 久久久电影网站 | 午夜 久久 tv | 日韩欧美国产免费播放 | 国产午夜激情视频 | 亚洲色图22p | 欧美日韩一区二区在线 | 免费成人av电影 | 成人毛片久久 | 久久一本综合 | 国产一区二区在线视频观看 | 99久高清在线观看视频99精品热在线观看视频 | 欧美精品久久久久久久免费 | 免费性网站 | 91色在线观看视频 | 久久午夜鲁丝片 | 中文字幕韩在线第一页 | 久久精品美女视频网站 | 国产成人精品午夜在线播放 | 日韩av在线不卡 | 国产第一页精品 | 日本在线观看视频一区 | 夜色成人网 | 天天艹日日干 | 一本一道波多野毛片中文在线 | 亚洲成人网在线 | 成人av在线网址 | 亚洲视频综合 | 亚洲人在线 | 日产av在线播放 | 香蕉视频国产在线观看 | 三级av在线播放 | 日本女人b| 99久久综合狠狠综合久久 | 午夜 免费| 视频在线99 | 一级黄色免费 | 香蕉视频在线播放 | 精品伦理一区二区三区 | 久久在草 | 射久久久 | 成人中文字幕av | 99精品视频在线播放观看 | 一区二区三区韩国免费中文网站 | 中文字幕在线观看第二页 | 99视频在线精品 | 国产精品刺激对白麻豆99 | 亚洲久草网 | 国产女人免费看a级丨片 | 日韩在线不卡视频 | 国产精品v欧美精品 | 久久九九精品久久 | 97**国产露脸精品国产 | 亚洲综合在线发布 | 亚洲视频免费视频 | 狠狠色丁婷婷日日 | 天天天天天天干 | 成人av一二三区 | 国产传媒中文字幕 | 国产1级视频 | 欧美在线视频a | 免费在线观看91 | 国内精品久久久久久中文字幕 | 久久国产热 | 六月久久婷婷 | 四虎永久免费网站 | 免费在线观看av网站 | 91九色蝌蚪视频 | 久草在线中文888 | 国产高清视频在线 | 国产亚洲成人网 | 美女国产精品 | 国产伦精品一区二区三区在线 | 激情欧美一区二区三区免费看 | 久射网 | 国产一区二区网址 | 国产99爱| 日本xxxxav | 亚洲涩涩色 | 日本黄色大片免费看 | 久草视频免费看 | 97精品视频在线播放 | 色视频在线观看 | 婷婷中文字幕在线观看 | 精品国产99 | 中文字幕日韩免费视频 | 99国产精品久久久久久久久久 | 高清不卡毛片 | 欧美日韩高清一区二区三区 | 成年人在线观看视频免费 | 91精品久久久久久久91蜜桃 | 久久免费资源 | 久草在线资源免费 | 午夜精品福利影院 | 九色91在线 | 日韩欧美在线视频一区二区三区 | 97国产精品久久 | 狠狠色丁香婷婷综合视频 | 在线观看中文字幕一区 | 国内精品久久久久影院男同志 | 99夜色| 69视频在线 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 久草在线中文视频 | 伊人五月| 天天色天天操天天爽 | 精品亚洲va在线va天堂资源站 | 成人黄色大片在线免费观看 | 国产精品黄色 | mm1313亚洲精品国产 | 亚洲精品资源在线观看 | 一级免费看视频 | 国产精品资源在线观看 | 久久国产精品偷 | 在线免费黄 | 一区二区av| 黄色电影网站在线观看 | 国产精品igao视频网网址 | 久久高清视频免费 | 久久国语露脸国产精品电影 | 久久字幕 | www毛片com| 色婷婷福利 | 中文字幕一区二区三区在线视频 | 深夜免费福利网站 | 永久免费视频国产 | 国产高清黄色 | 精品国产乱码久久久久 | 欧美精品免费一区二区 | 国产精彩视频 | 美女视频网 | 国产五月婷婷 | 日批网站免费观看 | 久久夜av | 国产精品久久久区三区天天噜 | 成人免费看视频 | 日日夜夜噜 | 中文字幕在线观看免费高清电影 | 天天综合视频在线观看 | 久久99亚洲热视 | 久久女教师 | 九九久久久 | 婷婷激情影院 | 久久只精品99品免费久23小说 | 久久久免费少妇 | 成年人在线免费看 | 国产美女网站在线观看 | 婷婷网五月天 | 久草久视频 | 视频福利在线 | 国产视频二 | 最近高清中文在线字幕在线观看 | 欧美日韩中文在线视频 | 99re6热在线精品视频 | 日日干美女 | 免费看成人 | 91一区二区三区久久久久国产乱 | 亚洲成av人片 | 欧美性另类| 久久视频这里有久久精品视频11 | 久久伊人91 | 国产精品视频最多的网站 | 一色屋精品视频在线观看 | 99精品热 | 亚洲人成人99网站 | 三级性生活视频 | 久一久久 | 玖草影院 | 在线观看av网 | 欧美成人在线网站 | 久久久久| 精品视频免费观看 | 日本一区二区三区视频在线播放 | 国产一区成人 | 久久久五月婷婷 | 中文字幕资源在线观看 | 国产亚洲亚洲 | 久久午夜色播影院免费高清 | 亚洲国产精品va在线看黑人动漫 | www.91成人 | 成人黄色av免费在线观看 | 97在线免费观看视频 | 婷婷久月| 日韩免费电影一区二区三区 | 中文字幕一区二区三区在线观看 | 丁五月婷婷| 免费观看成年人视频 | 国产日韩欧美在线影视 | 色网站在线看 | 一区二区三区在线免费观看视频 | 二区中文字幕 | 夜夜夜夜操 | 成年人视频免费在线 | 欧美作爱视频 | 亚洲电影一级黄 | 亚洲婷久久 | 久久久受www免费人成 | 日本黄色免费电影网站 | 亚洲精品av在线 | 国产不卡在线观看 | av丁香花| 国产 日韩 在线 亚洲 字幕 中文 | 午夜免费久久看 | 国产黑丝一区二区三区 | 日韩欧美专区 | 国产亚洲免费的视频看 | 亚洲高清视频在线观看 |