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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C# 操作Sql Server 学习总结

發(fā)布時(shí)間:2025/4/14 C# 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 操作Sql Server 学习总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C#中產(chǎn)生SQL語(yǔ)句的幾種方式



(1)拼接產(chǎn)生SQL語(yǔ)句:


? ? ? ?string sql = "insert into czyb(yhm,mm,qx) values('" + txtName.Text + "','" + txtPassword.Text + "','" + cmbPriority.Text + "')";
? ? ? ?OleDbCommand cmd = new OleDbCommand(sql, conn);


? ? ? ?這種方法寫(xiě)法比較復(fù)雜,且安全性低,容易遭受SQL注入攻擊。


(2)用string.Format方法:


? ? ? string sql = string.Format("insert into czyb(yhm,mm,qx) values('{0}','{1}','{2}')", txtName.Text, txtPassword.Text, cmbPriority.Text);


? ? ? 只是可讀性?xún)?yōu)于第(1)種。


(3)用參數(shù)化SQL語(yǔ)句:


? ? ? string sql="insert into czyb(yhm,mm,qx) values (@yhm,@mm,@qx)";
? ? ? OleDbCommand cmd = new OleDbCommand();
? ? ? cmd.CommandText = sql;
? ? ? cmd.Parameters.AddWithValue("@yhm", txtName.Text);
? ? ? cmd.Parameters.AddWithValue("@mm", txtPassword.Text);
? ? ? cmd.Parameters.AddWithValue("@qx", cmbPriority.Text);
? ? ? cmd.Connection = conn;
? ? ? conn.Open();
? ? ? cmd.ExecuteNonQuery();


? ? ?代碼結(jié)構(gòu)清楚,對(duì)于不支持存儲(chǔ)過(guò)程的數(shù)據(jù)庫(kù)(如Access),推薦采用本方法。


(4)如果數(shù)據(jù)庫(kù)支持存儲(chǔ)過(guò)程(如SQL Server),可以調(diào)用存儲(chǔ)過(guò)程執(zhí)行SQL:


? ? ? ? SqlConnection conn = new SqlConnection(txtConn);
? ? ? ? SqlCommand cmd = new SqlCommand("SearchContact", conn); ?//存儲(chǔ)過(guò)程名稱(chēng)為SearchContact
? ? ? ? cmd.CommandType = CommandType.StoredProcedure;
? ? ? ? cmd.Parameters.Add("@name", SqlDbType.VarChar, 50); ? //傳入?yún)?shù)
? ? ? ? cmd.Parameters["@name"].Value = txtName.Text.Trim();


? ? ? ?由于存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)預(yù)編譯的,執(zhí)行效率高,推薦采用。


========

C#連接SQL Server數(shù)據(jù)庫(kù)代碼解析



連接字符串:


<connectionStrings>


  <add name="conn" connectionString="user id=sa;Password=;initial catalog=Northwind;Server=YourSQLServer;Connect Timeout=30;" providerName="System.Data.SqlClient" />


</connectionStrings>


--------------------------------------------------------------------------------


參數(shù)介紹(注意:參數(shù)間用分號(hào)分隔):


"user id=sa":連接數(shù)據(jù)庫(kù)的驗(yàn)證用戶(hù)名為sa.他還有一個(gè)別名"uid",所以這句我們還可以寫(xiě)成"uid=sa".


"password=":連接數(shù)據(jù)庫(kù)的驗(yàn)證密碼為空.他的別名為"pwd",所以我們可以寫(xiě)為"pwd=".


這里注意,你的SQL Server必須已經(jīng)設(shè)置了需要用戶(hù)名和密碼來(lái)登錄,否則不能用這樣的方式來(lái)登錄.如果你的SQL Server設(shè)置為Windows登錄,那么在這里就不需要使用"user id"和"password"這樣的方式來(lái)登錄,而需要使用"Trusted_Connection=SSPI"來(lái)進(jìn)行登錄.


"initial catalog=Northwind":使用的數(shù)據(jù)源為"Northwind"這個(gè)數(shù)據(jù)庫(kù).他的別名為"Database",本句可以寫(xiě)成"Database=Northwind".


"Server=YourSQLServer":使用名為"YourSQLServer"的服務(wù)器.他的別名為"Data Source","Address","Addr".如果使用的是本地?cái)?shù)據(jù)庫(kù)且定義了實(shí)例名,則可以寫(xiě)為"Server=(local)\實(shí)例名";如果是遠(yuǎn)程服務(wù)器,則將"(local)"替換為遠(yuǎn)程服務(wù)器的名稱(chēng)或IP地址.


"Connect Timeout=30":連接超時(shí)時(shí)間為30秒.


注:以上User ID,Password可以大寫(xiě)也可以小寫(xiě),與大小寫(xiě)無(wú)關(guān)
========

用c#讀取并分析sql2005日志

??
用過(guò)logExplorer的朋友都會(huì)被他強(qiáng)悍的功能吸引,我寫(xiě)過(guò)一篇詳細(xì)的操作文檔可以參考
http://blog.csdn.net/jinjazz/archive/2008/05/19/2459692.aspx


我們可以自己用開(kāi)發(fā)工具來(lái)實(shí)現(xiàn)sql日志的讀取,這個(gè)應(yīng)用還是很酷的,具體思路


1、首先要了解一個(gè)沒(méi)有公開(kāi)的系統(tǒng)函數(shù)::fn_dblog,他可以讀取sql日志,并返回二進(jìn)制的行數(shù)據(jù)
2、然后要了解sql的二進(jìn)制數(shù)據(jù)是如何存儲(chǔ)的,這個(gè)可以參考我的blog文章
http://blog.csdn.net/jinjazz/archive/2008/08/07/2783872.aspx
3、用自己擅長(zhǎng)的開(kāi)發(fā)工具來(lái)分析數(shù)據(jù),得到我們需要的信息


我用c#寫(xiě)了一個(gè)測(cè)試樣例,分析了int,char,datetime和varchar的日志情況而且沒(méi)有考慮null和空字符串的保存,希望感興趣的朋友能和我一起交流打造屬于自己的日志分析工具


詳細(xì)的試驗(yàn)步驟以及代碼如下:


1、首先建立sqlserver的測(cè)試環(huán)境,我用的sql2005,這個(gè)過(guò)程不能保證在之前的版本中運(yùn)行
以下sql語(yǔ)句會(huì)建立一個(gè)dbLogTest數(shù)據(jù)庫(kù),并建立一張log_test表,然后插入3條數(shù)據(jù)之后把表清空
use master
go
create database dbLogTest
go
use ?dbLogTest
go
create table log_test(id int ,code char(10),name varchar(20),date datetime,memo varchar(100))
insert into log_test select 100, 'id001','jinjazz',getdate(),'剪刀'
insert into log_test select 65549,'id002','游客',getdate()-1,'這家伙很懶,沒(méi)有設(shè)置昵稱(chēng)'
insert into log_test select -999,'id003','這家伙來(lái)自火星',getdate()-1000,'a'
delete from log_test
--use master?
--go
--drop database dbLogTest


2、我們最終的目的是要找到被我們刪掉的數(shù)據(jù)


3、分析日志的c#代碼:我已經(jīng)盡量詳細(xì)的寫(xiě)了注釋
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication21
{
? ? class Program
? ? {
? ? ? ? /// <summary>
? ? ? ? /// 分析sql2005日志,找回被delete的數(shù)據(jù),引用請(qǐng)保留以下信息
? ? ? ? /// 作者:jinjazz (csdn的剪刀)
? ? ? ? /// 作者blog:http://blog.csdn.net/jinjazz
? ? ? ? /// </summary>
? ? ? ? /// <param name="args"></param>
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection())
? ? ? ? ? ? {
? ? ? ? ? ? ? ? conn.ConnectionString = "server=localhost;uid=sa;pwd=sqlgis;database=dbLogTest";
? ? ? ? ? ? ? ? conn.Open();
? ? ? ? ? ? ? ? using (System.Data.SqlClient.SqlCommand command = conn.CreateCommand())
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? //察看dbo.log_test對(duì)象的sql日志
? ? ? ? ? ? ? ? ? ? command.CommandText = @"SELECT allocunitname,operation,[RowLog Contents 0] as r0,[RowLog Contents 1]as r1?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? from::fn_dblog (null, null) ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? where allocunitname like 'dbo.log_test%'and
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? operation in('LOP_INSERT_ROWS','LOP_DELETE_ROWS')";
? ? ? ? ? ? ? ? ? ? System.Data.SqlClient.SqlDataReader reader = command.ExecuteReader();
? ? ? ? ? ? ? ? ? ? //根據(jù)表字段的順序建立字段數(shù)組
? ? ? ? ? ? ? ? ? ? Datacolumn[] columns = new Datacolumn[]
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? new Datacolumn("id", System.Data.SqlDbType.Int),
? ? ? ? ? ? ? ? ? ? ? ? ? ? new Datacolumn("code", System.Data.SqlDbType.Char,10),
? ? ? ? ? ? ? ? ? ? ? ? ? ? new Datacolumn("name", System.Data.SqlDbType.VarChar),
? ? ? ? ? ? ? ? ? ? ? ? ? ? new Datacolumn("date", System.Data.SqlDbType.DateTime),
? ? ? ? ? ? ? ? ? ? ? ? ? ? new Datacolumn("memo", System.Data.SqlDbType.VarChar)
? ? ? ? ? ? ? ? ? ? ? ? };
? ? ? ? ? ? ? ? ? ? //循環(huán)讀取日志
? ? ? ? ? ? ? ? ? ? while (reader.Read())
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? byte[] data = (byte[])reader["r0"];
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? try
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? //把二進(jìn)制數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為明文
? ? ? ? ? ? ? ? ? ? ? ? ? ? TranslateData(data, columns);
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("數(shù)據(jù)對(duì)象{1}的{0}操作:", reader["operation"], reader["allocunitname"]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach (Datacolumn c in columns)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("{0} = {1}", c.Name, c.Value);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? catch
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? //to-do...
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? reader.Close();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? conn.Close();
? ? ? ? ? ? }
? ? ? ? ? ? Console.WriteLine("************************日志分析完成");
? ? ? ? ? ? Console.ReadLine();
? ? ? ? }
? ? ? ? //自定義的column結(jié)構(gòu)
? ? ? ? public class Datacolumn
? ? ? ? {
? ? ? ? ? ? public string Name;
? ? ? ? ? ? public System.Data.SqlDbType DataType;
? ? ? ? ? ? public short Length = -1;
? ? ? ? ? ? public object Value = null;
? ? ? ? ? ? public Datacolumn(string name, System.Data.SqlDbType type)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Name = name;
? ? ? ? ? ? ? ? DataType = type;
? ? ? ? ? ? }
? ? ? ? ? ? public Datacolumn(string name,System.Data.SqlDbType type,short length)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Name = name;
? ? ? ? ? ? ? ? DataType = type;
? ? ? ? ? ? ? ? Length = length;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? /// <summary>
? ? ? ? /// sql二進(jìn)制結(jié)構(gòu)翻譯,這個(gè)比較關(guān)鍵,測(cè)試環(huán)境為sql2005,其他版本沒(méi)有測(cè)過(guò)。
? ? ? ? /// </summary>
? ? ? ? /// <param name="data"></param>
? ? ? ? /// <param name="columns"></param>
? ? ? ? static void TranslateData(byte[] data, Datacolumn[] columns)
? ? ? ? {
? ? ? ? ? ? //我只根據(jù)示例寫(xiě)了Char,DateTime,Int三種定長(zhǎng)度字段和varchar一種不定長(zhǎng)字段,其余的有興趣可以自己補(bǔ)充
? ? ? ? ? ? //這里沒(méi)有暫時(shí)沒(méi)有考慮Null和空字符串兩種情況,以后會(huì)補(bǔ)充。
? ? ? ? ? ? //引用請(qǐng)保留以下信息:
? ? ? ? ? ? //作者:jinjazz?
? ? ? ? ? ? //sql的數(shù)據(jù)行二進(jìn)制結(jié)構(gòu)參考我的blog
? ? ? ? ? ? //http://blog.csdn.net/jinjazz/archive/2008/08/07/2783872.aspx
? ? ? ? ? ? //行數(shù)據(jù)從第5個(gè)字節(jié)開(kāi)始
? ? ? ? ? ? short index = 4;
? ? ? ? ? ? //先取定長(zhǎng)字段
? ? ? ? ? ? foreach (Datacolumn c in columns)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? switch (c.DataType)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? case System.Data.SqlDbType.Char:
? ? ? ? ? ? ? ? ? ? ? ? //讀取定長(zhǎng)字符串,需要根據(jù)表結(jié)構(gòu)指定長(zhǎng)度
? ? ? ? ? ? ? ? ? ? ? ? c.Value = System.Text.Encoding.Default.GetString(data,index,c.Length);
? ? ? ? ? ? ? ? ? ? ? ? index += c.Length;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? case System.Data.SqlDbType.DateTime:
? ? ? ? ? ? ? ? ? ? ? ? //讀取datetime字段,sql為8字節(jié)保存
? ? ? ? ? ? ? ? ? ? ? ? System.DateTime date = new DateTime(1900, 1, 1);
? ? ? ? ? ? ? ? ? ? ? ? //前四位1/300秒保存
? ? ? ? ? ? ? ? ? ? ? ? int second = BitConverter.ToInt32(data, index);
? ? ? ? ? ? ? ? ? ? ? ? date = date.AddSeconds(second/300);
? ? ? ? ? ? ? ? ? ? ? ? index += 4;
? ? ? ? ? ? ? ? ? ? ? ? //后四位1900-1-1的天數(shù)
? ? ? ? ? ? ? ? ? ? ? ? int days = BitConverter.ToInt32(data, index);
? ? ? ? ? ? ? ? ? ? ? ? date=date.AddDays(days);
? ? ? ? ? ? ? ? ? ? ? ? index += 4;
? ? ? ? ? ? ? ? ? ? ? ? c.Value = date;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? case System.Data.SqlDbType.Int:
? ? ? ? ? ? ? ? ? ? ? ? //讀取int字段,為4個(gè)字節(jié)保存
? ? ? ? ? ? ? ? ? ? ? ? c.Value = BitConverter.ToInt32(data, index);
? ? ? ? ? ? ? ? ? ? ? ? index += 4;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ?default:
? ? ? ? ? ? ? ? ? ? ? ?//忽略不定長(zhǎng)字段和其他不支持以及不愿意考慮的字段
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //跳過(guò)三個(gè)字節(jié)
? ? ? ? ? ? index += 3;
? ? ? ? ? ? //取變長(zhǎng)字段的數(shù)量,保存兩個(gè)字節(jié)
? ? ? ? ? ? short varColumnCount = BitConverter.ToInt16(data, index);
? ? ? ? ? ? index += 2;
? ? ? ? ? ? //接下來(lái),每?jī)蓚€(gè)字節(jié)保存一個(gè)變長(zhǎng)字段的結(jié)束位置,
? ? ? ? ? ? //所以第一個(gè)變長(zhǎng)字段的開(kāi)始位置可以算出來(lái)
? ? ? ? ? ? short startIndex =(short)( index + varColumnCount * 2);
? ? ? ? ? ? //第一個(gè)變長(zhǎng)字段的結(jié)束位置也可以算出來(lái)
? ? ? ? ? ? short endIndex = BitConverter.ToInt16(data, index);
? ? ? ? ? ? //循環(huán)變長(zhǎng)字段列表讀取數(shù)據(jù)
? ? ? ? ? ? foreach (Datacolumn c in columns)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? switch (c.DataType)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? case System.Data.SqlDbType.VarChar:
? ? ? ? ? ? ? ? ? ? ? ? //根據(jù)開(kāi)始和結(jié)束位置,可以算出來(lái)每個(gè)變長(zhǎng)字段的值
? ? ? ? ? ? ? ? ? ? ? ? c.Value =System.Text.Encoding.Default.GetString(data, startIndex, endIndex - startIndex);
? ? ? ? ? ? ? ? ? ? ? ? //下一個(gè)變長(zhǎng)字段的開(kāi)始位置
? ? ? ? ? ? ? ? ? ? ? ? startIndex = endIndex;
? ? ? ? ? ? ? ? ? ? ? ? //獲取下一個(gè)變長(zhǎng)字段的結(jié)束位置
? ? ? ? ? ? ? ? ? ? ? ? index += 2;
? ? ? ? ? ? ? ? ? ? ? ? endIndex = BitConverter.ToInt16(data, index);
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? //忽略定長(zhǎng)字段和其他不支持以及不愿意考慮的字段
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //獲取完畢
? ? ? ? }
? ? }
}
4、更改你的sql連接字符串后運(yùn)行以上代碼,會(huì)看到如下輸出信息:
數(shù)據(jù)對(duì)象dbo.log_test的LOP_INSERT_ROWS操作:
id = 100
code = id001
name = jinjazz
date = 2008-8-7 18:14:03
memo = 剪刀
數(shù)據(jù)對(duì)象dbo.log_test的LOP_INSERT_ROWS操作:
id = 65549
code = id002
name = 游客
date = 2008-8-6 18:14:03
memo = 這家伙很懶,沒(méi)有設(shè)置昵稱(chēng)
數(shù)據(jù)對(duì)象dbo.log_test的LOP_INSERT_ROWS操作:
id = -999
code = id003
name = 這家伙來(lái)自火星
date = 2005-11-11 18:14:03
memo = a
數(shù)據(jù)對(duì)象dbo.log_test的LOP_DELETE_ROWS操作:
id = 100
code = id001
name = jinjazz
date = 2008-8-7 18:14:03
memo = 剪刀
數(shù)據(jù)對(duì)象dbo.log_test的LOP_DELETE_ROWS操作:
id = 65549
code = id002
name = 游客
date = 2008-8-6 18:14:03
memo = 這家伙很懶,沒(méi)有設(shè)置昵稱(chēng)
數(shù)據(jù)對(duì)象dbo.log_test的LOP_DELETE_ROWS操作:
id = -999
code = id003
name = 這家伙來(lái)自火星
date = 2005-11-11 18:14:03
memo = a
************************日志分析完成


試驗(yàn)成功~~


dbcc log和fn_dblog函數(shù)真的是分析日志文件嗎??


這個(gè)問(wèn)題需要了解CheckPoint和sql的存儲(chǔ)機(jī)制,首先參考如下文檔?
http://msdn.microsoft.com/zh-cn/library/ms188748.aspx?


CheckPoint?
將當(dāng)前數(shù)據(jù)庫(kù)的全部臟頁(yè)寫(xiě)入磁盤(pán)。“臟頁(yè)”是已輸入緩存區(qū)高速緩存且已修改但尚未寫(xiě)入磁盤(pán)的數(shù)據(jù)頁(yè)。CHECKPOINT 可創(chuàng)建一個(gè)檢查點(diǎn),在該點(diǎn)保證全部臟頁(yè)都已寫(xiě)入磁盤(pán),從而在以后的恢復(fù)過(guò)程中節(jié)省時(shí)間。?


什么時(shí)候執(zhí)行它?大致有幾種情況:?
手動(dòng)調(diào)用、sql自動(dòng)定時(shí)執(zhí)行、數(shù)據(jù)庫(kù)脫機(jī)之類(lèi)操作、數(shù)據(jù)庫(kù)進(jìn)程正常終止等情況。?


簡(jiǎn)單日志模型的原理就是每次checkpoint后自動(dòng)截?cái)嗳罩尽?


dbcc log到底有什么用?和checkpoint有什么關(guān)系?
在事物外執(zhí)行過(guò)CheckPoint后,dbcc log語(yǔ)句將無(wú)法獲取之前的日志。所以我推斷此語(yǔ)句是系統(tǒng)為了在非正常關(guān)閉數(shù)據(jù)庫(kù)的狀態(tài)下,來(lái)保證日志,內(nèi)存中的臟頁(yè)和數(shù)據(jù)文件的一致性的措施,此方法并不是讀取日志文件的全部信息。?


log explorer的原理?
還沒(méi)有搞清楚,此前的推斷是錯(cuò)誤的,它不是通過(guò)dbcc log 或者fn_dblog方法實(shí)現(xiàn)的,不但CheckPoint對(duì)它沒(méi)有影響,而且他會(huì)主動(dòng)調(diào)用這個(gè)語(yǔ)句。


日志分析工具宣告流產(chǎn),不過(guò)基本上搞清了日志和數(shù)據(jù)文件的存儲(chǔ)結(jié)構(gòu),希望以后仍然可以用的上這些經(jīng)驗(yàn)
========

解析c#得到局域網(wǎng)內(nèi)所有sqlserver數(shù)據(jù)庫(kù)實(shí)例



官方的做法是這樣的:
using System.Data.Sql; ?
?
class Program ?
{ ?
? static void Main() ?
? { ?
? ? // Retrieve the enumerator instance and then the data. ?
? ? SqlDataSourceEnumerator instance = ?
? ? ? SqlDataSourceEnumerator.Instance; ?
? ? System.Data.DataTable table = instance.GetDataSources(); ?
?
? ? // Display the contents of the table. ?
? ? DisplayData(table); ?
?
? ? Console.WriteLine("Press any key to continue."); ?
? ? Console.ReadKey(); ?
? } ?
?
? private static void DisplayData(System.Data.DataTable table) ?
? { ?
? ? foreach (System.Data.DataRow row in table.Rows) ?
? ? { ?
? ? ? foreach (System.Data.DataColumn col in table.Columns) ?
? ? ? { ?
? ? ? ? Console.WriteLine("{0} = {1}", col.ColumnName, row[col]); ?
? ? ? } ?
? ? ? Console.WriteLine("============================"); ?
? ? } ?
? } ?
}?


來(lái)源于:http://msdn.microsoft.com/en-us/library/system.data.sql.sqldatasourceenumerator.getdatasources.aspx
請(qǐng)看遇到的問(wèn)題及解決方法:
?
實(shí)際上問(wèn)題就是,得到的結(jié)果只有服務(wù)器名字,但由于是默認(rèn)實(shí)例,所以并沒(méi)有實(shí)例名字。而且,假如安裝的是sqlserver,則連接數(shù)據(jù)庫(kù)是必須是 服務(wù)器\sqlexpress(默認(rèn)實(shí)例名稱(chēng));假如安裝的是完整版的sqlexpress,則只需 服務(wù)器 即可連接。這就造成了不少問(wèn)題。 上邊百度給出比較好的解決方法。
?
本文出自 “獨(dú)釣寒江雪” 博客,請(qǐng)務(wù)必保留此出處http://zhaojie.blog.51cto.com/1768828/932275
========

C#數(shù)據(jù)庫(kù)查詢(xún)和操作大全

一:C#數(shù)據(jù)庫(kù)查詢(xún)之?dāng)?shù)據(jù)庫(kù)連接代碼:


SqlConnectionobjSqlConnection=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
objSqlConnection.Open();?
二:數(shù)據(jù)庫(kù)的添加記錄代碼:


inti=0; ?
strings1="",s2=""; ?
i=Convert.ToInt16(textBox1.Text); ?
s1=textBox2.Text; ?
s2=textBox3.Text; ?
?
SqlConnectionobjSqlConnection=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
objSqlConnection.Open(); ?
?
MessageBox.Show("數(shù)據(jù)庫(kù)連接成功","好"); ?
?
try ?
{ ?
SqlCommandsqlcom=newSqlCommand("insertintoinfo(id,name,sex)values("+i+",'"+s1+"','"+s2+"')",objSqlConnection); ?
sqlcom.ExecuteNonQuery(); ?
MessageBox.Show("添加成功!","啊"); ?
} ?
catch(Exceptiona) ?
{ ?
MessageBox.Show(a.ToString()); ?
} ?
MessageBox.Show("添加成功!","啊"); ?
}?
三:數(shù)據(jù)庫(kù)的修改代碼:


inti=0; ?
strings1="",s2=""; ?
s1=textBox2.Text; ?
s2=textBox3.Text; ?
if(textBox1.Text.Length==0) ?
i=0; ?
else?
i=Convert.ToInt32(textBox1.Text); ?
?
SqlConnectionobjSqlConnection=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
objSqlConnection.Open(); ?
MessageBox.Show("數(shù)據(jù)庫(kù)連接成功","好"); ?
try ?
{ ?
SqlCommandsqlcom=newSqlCommand("updateinfosetname='"+s1+"',sex='"+s2+"'"+"whereid="+i,objSqlConnection); ?
sqlcom.ExecuteNonQuery(); ?
MessageBox.Show("修改成功!","啊"); ?
objSqlConnection.Close(); ?
} ?
catch(Exceptiona) ?
{ ?
MessageBox.Show(a.ToString()); ?
}?
四:數(shù)據(jù)庫(kù)的刪除代碼:


inti=0; ?
strings1="",s2=""; ?
s1=textBox2.Text; ?
s2=textBox3.Text; ?
if(textBox1.Text.Length==0) ?
i=0; ?
else?
i=Convert.ToInt16(textBox1.Text); ?
SqlConnectionobjSqlConnection=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
objSqlConnection.Open(); ?
MessageBox.Show("數(shù)據(jù)庫(kù)連接成功","好"); ?
try?
{ ?
SqlCommandsqlcom=newSqlCommand("deletefrominfowhereid="+i,objSqlConnection); ?
?
sqlcom.ExecuteNonQuery(); ?
?
MessageBox.Show("刪除成功!","啊"); ?
?
objSqlConnection.Close(); ?
} ?
catch(Exceptiona) ?
{ ?
MessageBox.Show(a.ToString()); ?
}?
五:數(shù)據(jù)庫(kù)的查詢(xún)代碼:


1.類(lèi)開(kāi)始:


DataTabledt1=newDataTable(); ?
SqlDataAdapterda1=newSqlDataAdapter();?
2.按鈕代碼:


inti=0,n=0; ?
strings1="",s2=""; ?
s1=textBox2.Text; ?
s2=textBox3.Text; ?
if(textBox1.Text.Length==0) ?
i=0; ?
else?
i=Convert.ToInt32(textBox1.Text); ?
SqlConnectionobjSqlConnection=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
objSqlConnection.Open(); ?
MessageBox.Show("數(shù)據(jù)庫(kù)連接成功","好"); ?
?
stringquery="SELECT*frominfowhereid="+i; ?
?
DataSetobjDataSet=newDataSet(); ?
?
SqlDataAdapterobj=newSqlDataAdapter(); ?
?
obj.SelectCommand=newSqlCommand(query,objSqlConnection); ?
?
obj.Fill(objDataSet,"info"); ?
?
SqlCommandobjSqlCommand=newSqlCommand(query,objSqlConnection); ?
?
SqlDataReaderobjSqlReader=objSqlCommand.ExecuteReader(); ?
?
while(objSqlReader.Read()) ?
{ ?
n+=1; ?
MessageBox.Show("編號(hào):"+objSqlReader.Getvalue(0)+"姓名:"+objSqlReader.Getvalue(1)+"性別"+objSqlReader.Getvalue(2)); ?
} ?
if(n==0) ?
MessageBox.Show("數(shù)據(jù)庫(kù)中沒(méi)有這樣的記錄!");?
六:C#數(shù)據(jù)庫(kù)查詢(xún)代碼:


inti=0; ?
//intn=0; ?
strings1="",s2=""; ?
stringsql; ?
s1=textBox2.Text; ?
s2=textBox3.Text; ?
?
if(textBox1.Text.Length==0) ?
{ ?
i=0; ??
} ?
else?
i=Convert.ToInt32(textBox1.Text); ?
SqlConnectionobjSqlConnection=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
objSqlConnection.Open(); ?
MessageBox.Show("數(shù)據(jù)庫(kù)連接成功","好"); ?
stringquery="SELECT*frominfowhereid="+i; ?
if(i==0) ?
sql="select*frominfo"; ?
else?
sql="select*frominfowhereid="+i; ?
da1=newSqlDataAdapter(sql,objSqlConnection); ?
dt1.Clear(); ?
da1.Fill(dt1); ?
dataGridView1.DataSource=dt1;?
C#數(shù)據(jù)庫(kù)查詢(xún)之?dāng)?shù)據(jù)庫(kù)的封裝類(lèi)代碼:


classDBClass ?
{ ??
publicvoiddbclass(stringsql) ?
{ ?
try?
{ ?
SqlConnectionsqlcon=newSqlConnection("server=127.0.0.1;uid=sa;pwd=;database=test"); ?
sqlcon.Open(); ?
?
SqlTransactionobjt=sqlcon.BeginTransaction();//事物開(kāi)始 ?
?SqlCommandsqlcom=newSqlCommand(sql,sqlcon); ?
?sqlcom.Transaction=objt;//將Command對(duì)象設(shè)置為事物處理的對(duì)象 ?
?sqlcom.ExecuteNonQuery(); ?
objt.Commit();//提交事物 ?
sqlcon.Close(); ?
} ?
catch(Exceptiona) ?
{ ?
MessageBox.Show(a.ToString()); ?
} ?
} ?
} ?
--db2數(shù)據(jù)庫(kù)連接代碼: ?
stringstrcon="Provider=IBMDADB2;DataSource=hfzd;UserId=db2admin;Password=db2admin"; ?
//stringsql="select*fromADMINISTRATOR.HFZD"; ?
stringsql="deletefromADMINISTRATOR.HFZDwhereID=1"; ?
OleDbConnectionolecon=newOleDbConnection(strcon); ?
olecon.Open(); ?
MessageBox.Show("數(shù)據(jù)庫(kù)已連接上"); ?
dt.Clear(); ?
da=newOleDbDataAdapter(sql,olecon); ?
da.Fill(dt); ?
dataGridView1.DataSource=dt; ?
olecon.Close();
========

C#與SQL常用操作



ADO.NET中對(duì)數(shù)據(jù)庫(kù)的操作是:斷開(kāi)式連接,只需要寫(xiě)一次連接服務(wù)器,庫(kù)名,用戶(hù)名,密碼的字符串,以后只對(duì)con 進(jìn)行close()和con.Open() 操作即可連接數(shù)據(jù)庫(kù)
? ? ? ?先從數(shù)據(jù)庫(kù)中取出結(jié)果集后進(jìn)行處理數(shù)據(jù)后再UpData更新到數(shù)據(jù)庫(kù)(共三步)
? ? ? ?如果只想讀取和顯示數(shù)據(jù) 則只需使用數(shù)據(jù)讀取器 SqlDataReader即可, 但要處理數(shù)據(jù)然后更新數(shù)據(jù)庫(kù)(增加,更改),就需要用數(shù)據(jù)集DataSet和
? ? ? ?數(shù)據(jù)適配器SqlDataAdaper
?
SqlDataAdapter在下面有用法:
?
其中:讀取數(shù)據(jù)時(shí)用SqlDataReader是固定的 但是處理數(shù)據(jù)更新時(shí)(增加,更改)為兩種情況,(一)直接拼SQL語(yǔ)句 適用于簡(jiǎn)單的表,
? ? ? ?(二)用參數(shù)的 用到SqlDataAdaper 適用于復(fù)雜的表
? ? ? 建議:簡(jiǎn)單的表可以用(一) 但是在實(shí)際項(xiàng)目中復(fù)雜的表最好用(二)
? ? ? ? ? ?因?yàn)閹?shù)的 要插入或更改的數(shù)據(jù)結(jié)構(gòu)已被參數(shù)欲留位置了,不用對(duì)其進(jìn)行類(lèi)型轉(zhuǎn)換,當(dāng)在后面定義了參數(shù)后會(huì)自動(dòng)轉(zhuǎn)換,比較簡(jiǎn)單
? ? ? ? ? ?其中刪除一條記錄不用帶參數(shù)的直接用(一)拼SQL語(yǔ)句 cmd.ExecuteNonQuery()即可
? ? ? ? ? ?只有insert 和 update 增加和更改用帶參數(shù)的 如果全部刪除也的用帶參數(shù)的
?
? ?補(bǔ)充(必看):定義個(gè)全局變量 Private SqlConnectionm_con =null;
? ? ? ? 然后在方法內(nèi)部 m_con=new 出來(lái)
? ? ? ? 斷開(kāi)式連接體現(xiàn)在:寫(xiě)一個(gè) 連接數(shù)據(jù)庫(kù)的方法 返回bool值 以后再就不用寫(xiě)連服務(wù)器,庫(kù)名,用戶(hù)名,密碼的字符串了
? ? ? ? 以后再連接數(shù)據(jù)庫(kù)就直接用m_con.Open();即可打開(kāi)
? ? ? ? ? ? ? public ?bool db_check()//當(dāng)然復(fù)雜時(shí)就用傳參數(shù)形式
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?boolflag=false;
? ? ? ? ? ? ? ? ? ? ?stringConnectionString ="data source =" + dbServerName.Text +";initialcatalog=" + dbName.Text + ";
? ? ? ? ? ? ? ? ? ? ?userid=" +dbUsername.Text + ";password=" +this.dbPassword.Text +";";
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? m_con= new SqlConnection(ConnectionString);
? ? ? ? ? ? ? ? ? ? ? ? ? ? m_con.Open();
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("數(shù)據(jù)庫(kù)連接成功!");
? ? ? ? ? ? ? ? ? ? ? ? ? ? flag=true;
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? MessageBox.Show("數(shù)據(jù)庫(kù)連接不成功!");
? ? ? ? ? ? ? ? ? ? ? ? ? ? flag=false;
? ? ? ? ? ? ? ? ? ? ?} ? ?
? ? ? ? ? ? ? ? ? ? ?returnflag;
? ? ? ? ? ? ? }
?
(一)、c#連接SQL數(shù)據(jù)庫(kù)代碼:==只是一個(gè)簡(jiǎn)單的例子
? ? ? ?publicDataTable Read()
? ? ? ?{
? ? ? ?DataTabledt =new DataTable();//新建表
? ? ? ?dt.Columns.Add("col_1");//新建表中的列
? ? ? ?dt.Columns.Add("col_2");
? ? ? ?stringConnectionString ="data source=localhost;initial catalog=pubs;userid=sa;password=sa";
? ? ? ?SqlConnection Conn=new SqlConnection(ConnectionString);
? ? ? ?if(Conn.State==ConnectionState.Open)
? ? ? ?{
? ? ? ?Conn.Close();
? ? ? ?}
? ? ? ?Conn.ConnectionString=ConnectionString;
? ? ? ?Conn.Open();
? ? ? ?try
? ? ? ?{
? ? ? ?SqlCommandcmd=new SqlCommand("Select * from tab_name",Conn);
? ? ? ?SqlDataReadermyReader =cmd.ExecuteReader();//執(zhí)行SQL語(yǔ)句的真正查詢(xún)了
? ? ? ?inta=0;
? ? ? ?intb=0;//用來(lái)接收已經(jīng)查詢(xún)出來(lái)的字段
? ? ? ?while(myReader.Read()) 每次循環(huán)查到的一行 如果有N行就循環(huán)N次而已
? ? ? {
? ? ? ?DataRowdr =dt.NewRow();//每循環(huán)一次新建一行
? ? ? ?dr[0]=myReader.GetInt32(0).ToString(); ? ?表示接收第一個(gè)字段(string型)
? ? ? ?dr[1] =myReader.GetInt32(1).ToString(); ? ? ? ? ?
? ? ? ?dt.Rows.Add(dr);//每次循環(huán)把dr加進(jìn)去
? ? ? ?}
? ? ? ?myReader.Close();
? ? ? ?Conn.Close();
? ? ? ?}
? ? ? ?catch(Exceptionex)
? ? ? ?{
? ? ? MessageBox.Show(ex.Message.ToString());
? ? ? ?}
? ? ? ?returndt;
? ? ? ?}?
?
?(二)、 關(guān)于Command對(duì)象 (SqlCommand有兩種方法各有優(yōu)點(diǎn))
? ? ? //只用于查詢(xún)其實(shí)可以用于多記錄查詢(xún) 兩個(gè)SQL語(yǔ)句連起來(lái) 用 myReader.NextResult() 即可
? ? ? ?(A)SqlCommand cmd =new SqlCommand(SqlText,con);//這是讀數(shù)據(jù) 此要和 SqlDataReader連用 再和ExecuteReader或ExecuteScalar連用.
? ? ? ? ? ?new 這個(gè)是用來(lái)讀數(shù)據(jù)的 就用DataReader 來(lái)接
? ? ? ?這句等同于下面的三句
? ? ? ?(B)
? ? ? //這個(gè)不用于查詢(xún)用于執(zhí)行T_SQL增刪改等等
? ? ? ?SqlCommandcmd =con.CreateCommand();
? ? ? ?cmd.CommandTest="Createtable tab_name (name varchar(20),password varchar(20))";
? ? ? ?cmd.ExecuteNonQuery();
? ? ? ?***說(shuō)明 :關(guān)于SqlCommand用法有ExecuteNonQuery、ExecuteReader,ExecuteScalar三種其中ExecuteReader(所有查詢(xún)),ExecuteScalar(首行首列查詢(xún))
? ? ? ? ?ExecuteNonQuery為執(zhí)行T-SQL語(yǔ)句但是不建議查詢(xún)
? ? ? ? ?如果一個(gè)類(lèi)有多個(gè)SQL語(yǔ)句要執(zhí)行用(B)ExecuteNonQuery三句 但是ExecuteNonQuery自動(dòng)執(zhí)行最靠近它的那句CommandTest(每次只執(zhí)行一句)
? ? ? ? ?如果一個(gè)類(lèi)中只有一個(gè)SQL語(yǔ)句要執(zhí)行用(A)即可
? ? ? ?***說(shuō)明: (A)A與ExecuteReader,ExecuteScalar相匹配
? ? ? ? ?(B)B三句的與ExecuteNonQuery相匹配?
?
?(三)、關(guān)于數(shù)據(jù)讀取器 SqlDataReader 對(duì)象 (其中SqlDataReader是和SqlCommand cmd =new SqlCommand(SqlText,con)它連用的)
? ? ? ? 如果只想讀取和顯示數(shù)據(jù) 則只需使用數(shù)據(jù)讀取器 SqlDataReader即可 但要處理數(shù)據(jù)然后更新數(shù)據(jù)庫(kù),就需要用數(shù)據(jù)集DataSet和適配器 SqlDataAdaper
? ? ? ? SqlDataReader reader =new SqlDataReader();
? ? ? ? (A)實(shí)例:
? ? ? ?SqlCommandcmd=new SqlCommand("Select * from tab_name",Conn);
? ? ? ?SqlDataReadermyReader =cmd.ExecuteReader();//執(zhí)行SQL語(yǔ)句的真正查詢(xún)了
? ? ? ?while(myReader.Read()) 每次循環(huán)查到的一行 如果有N行就循環(huán)N次而已
? ? ? {
? ? ? ?DataRowdr =dt.NewRow();//每循環(huán)一次新建一行
? ? ? ?dr[0]=myReader.GetInt32(0).ToString(); ? ?表示接收第一個(gè)字段(string型)
? ? ? ?dr[1] =myReader.GetInt32(1).ToString(); ? ? ? ? ?
? ? ? ?dt.Rows.Add(dr);//每次循環(huán)把dr加進(jìn)去
? ? ? ?(B):GetSchemaTable方法 返回一個(gè)已填充的DataTable實(shí)例 (可以一次讀出完整表的內(nèi)容)
? ? ? ? ? ? ? DataTableschema =reader.GetSchemaTable();
? ? ? ? ? ? ? 用它可以把數(shù)據(jù)庫(kù)中查詢(xún)出的結(jié)果集以表的形式得到完整的傳給schema表
? ? ? ? ? ? ? ? 就可以通過(guò)DataTable的Rows屬性檢索行集,通過(guò)DataTable的Columns屬性檢索列集(Rows屬性可用于給表添加新行或者從表中刪除行,
? ? ? ? ? ? ? ? Columns屬性可用于添加列或者刪除現(xiàn)有的列)
? ? ? ? 實(shí)例:
? ? ? ? ? ? ? DataTableschema =reader.GetSchemaTable();//查詢(xún)出的結(jié)果集以表的形式得到完整的傳給schema表
? ? ? ? ? ? ? ? ?foreach(DataRow row in schema.Rows)//這時(shí)相當(dāng)于對(duì)schema表進(jìn)行操作了
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? foreach(DataColumn col in schema.Columns)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?Console.WriteLine(col.ColumnName+ "=" + row[col]);
? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("==========");
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? }
?
? ? ? ?(C):reader.NextResult() ?使用數(shù)據(jù)讀取器處理多個(gè)結(jié)果集
? ? ? ? ? ?string sql_1=@"select * from tab_1";
? ? ? ? ? ?string sql_2=@" select * fromtab_2";//這里一定要有個(gè)空格才可以 因?yàn)楫?dāng)兩個(gè)SQL語(yǔ)句連接時(shí)要用空格分開(kāi)
? ? ? ? ? ?string sql =sql_1 + sql_2;
? ? ? ? ? ?SqlCommand cmd =new SqlCommand(sql,con);//執(zhí)行兩個(gè)或多個(gè)SQL語(yǔ)句的聯(lián)合查詢(xún)
? ? ? ? ? ?SqlDataReader reader=cmd.ExecuteReader();//這時(shí)有多個(gè)結(jié)果集
? ? ? ? ? ?do
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ?while(reader.Read())//讀取一個(gè)結(jié)果集的所有內(nèi)容
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}:{1}",reader[0],reader[1]);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?Console.WriteLine("".PadLeft(60,'='));
? ? ? ? ? ? ? }
? ? ? ? ?while(reader.NextResult());//循環(huán)讀下個(gè)結(jié)果集
?
? ? ? ?***補(bǔ)充:如果想判斷當(dāng)SqlDataReader沒(méi)有讀出結(jié)果時(shí)要做的處理方法:
? ? ? ? ? ? ? ? 首先要走
? ? ? ? ? ? ? ? ? ? ?while(reader.Read())//讀取一個(gè)結(jié)果集的所有內(nèi)容
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("{0}:{1}",reader[0],reader[1]);
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ?中的reader.Read();//必須要走這一步
? ? ? ? ? ? ? ? ? ? ? ? ?如果想判斷當(dāng)沒(méi)有讀出結(jié)果時(shí) 就必須在While(reader.Read())之后
? ? ? ? ? ? ? ? ? ? ?if(reader.HasRows==false)//判斷如果沒(méi)有讀出結(jié)果
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MessageBox.Show("要查詢(xún)的結(jié)果不存在!");
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ?這是沒(méi)有讀出結(jié)果時(shí) 如果讀出結(jié)果了 那就直接走while(reader.Read()){}里面了就不走if(){}里面了
?
? ? ? ? ? ? ? ? ? ? ?其實(shí)如果用到了DataTable 也可以用if(dt.Rows.count<0){}也可以的
?
[SqlDataAdapter]
? ?(四)、SqlDataAdapter
? ? ? ? ? ? ? 數(shù)據(jù)集和數(shù)據(jù)適配器 ?DataSet 和 SqlDataAdapter
? ? ? ? ? 知識(shí)點(diǎn):
? ? ? ? ? ?SqlDataAdapter da =new SqlDataAdapter();
? ? ? ? ? ? ? ? ? (1)da.Fill();
? ? ? ? ? ? ? (2)da.SelectComand=newSqlCommand(sqlText,con);
? ? ? ? ? ? ? (3)DataTabledt=new DataTable();
? ? ? ? ? ? ? ? ? ?dt.Select(where條件,升降序);
? ? ? ? ? ? ? (4)
? ? ? ? ? ? ? 填充數(shù)據(jù)集有兩種方法:
? ? ? ? ? ? ? ?:使用數(shù)據(jù)適配器
? ? ? ? ? ? ? ? ? ? ?:從XML文檔中讀取數(shù)據(jù)
? ? ? ? ?4.1)
? ? ? ? ?SqlDataAdapter da =new SqlDataAdapter();
? ? ? ?da.SelectCommand =new SqlCommand(sqlText,con);
? ? ? ? ?DataSet ds =new DataSet();
? ? ? ? ?da.Fill(ds,"tab_name");//Fill方法內(nèi)部使用數(shù)據(jù)讀取器訪問(wèn)表模式和數(shù)據(jù),然后使用他們填充數(shù)據(jù)集
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//相當(dāng)于執(zhí)行SQL語(yǔ)句后把結(jié)果集取出后賦給DataSet中的tab_name表。
? ? ? ? ?4.2)
? ? ? ? ?數(shù)據(jù)集的篩選和排序:例子
? ? ? ? ? ? ? staticvoid Main(string [] args)
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?stringConnectionString =@"data source=localhost;initial catalog=northwind;userid =sa;password=sa;";
? ? ? ? ? ? ? ? ? ? ?stringsql_1=@"select * from customers";
? ? ? ? ? ? ? ? ? ? ?stringsql_2=@" select * from products where unitprice <10";//注意當(dāng)?shù)诙溥B接時(shí)要有個(gè)空格
? ? ? ? ? ? ? ? ? ? ?stringsql = sql_1+sql_2;//兩條SQL語(yǔ)句拼接
? ? ? ? ? ? ? ? ? ? ?SqlConnectioncon =new SqlConnection(ConnectionString);
? ? ? ? ? ? ? ? ? ? ?if(con.State==ConnectionState.Open)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Open();
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlDataAdapterda=new SqlDataAdapter();//A
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.SelectCommand=newSqlCommand(sql,con);//B
? ? ? ? ? ? ? ? ? ? ? ? ? ? //其中A和B兩句合并相當(dāng)于:SqlDataAdapterda=new SqlDataAdapter(sql,con);這一句
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataSetds=new DataSet();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Fill(ds,"customers");
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataTableCollectiondtc =ds.Tables;//通過(guò)這句把DataSet中的所有表都給了Table表集合
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Resultsfrm Customers table:");
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("CompanyName".PadRight(20)+ "ContactName".PadLeft(23) + "\n");
? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下兩句是篩選條件
? ? ? ? ? ? ? ? ? ? ? ? ? ? stringfl ="country='Germany'";//where 條件
? ? ? ? ? ? ? ? ? ? ? ? ? ? stringsrt ="companyname asc"; //降序
? ? ? ? ? ? ? ? ? ? ? ? ? ? //下面是知識(shí)點(diǎn) 數(shù)據(jù)集的篩選條件
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in dtc["customers"].Select(fl,srt))//這是用法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//dtc["customers"]說(shuō)明:dtc表集合中的customers表 .Select() 就是篩選條件
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}\t{1}",row["CompanyName"].ToString().PadRight(25),row["ContactName"]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("\n----------------------------");
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Resultsform Products table:");
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("ProductName".PadRight(20)+ "UnitPrice".PadLeft(21) + "\n");
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in dtc[1].Rows)
? ? ? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}\t{1}",row["productname"].ToString().PadRight(25),row["unitprice"]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch(Exceptionex)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Error:"+ex);
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?finally
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? }
?
? ? ? ? ? 4.3)
? ? ? ? ? 使用DataView ?其實(shí)DataView 的功能4.2)數(shù)據(jù)集都可以實(shí)現(xiàn) 所以一般不常用
? ? ? ? ? ? ? DatView是DataTable內(nèi)容的動(dòng)態(tài)表示,與SQL視圖一樣,他不保存數(shù)據(jù)
? ? ? ? ? ? ? 下面一句就是把dt表中的記錄有賦給了DataView dv 然后對(duì)dv進(jìn)行操作 DataView有自己的動(dòng)態(tài)方法
? ? ? ? ? ? ? DataViewdv =new DataView(dt,"country='Germany'","country",DataViewRowState.CurrentRows);
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? 例子:
? ? ? ? ? ? ? static void Main(string[]args)
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?stringConnectionString =@"data source =localhost;initial catalog =northwind;userid =sa;password=sa;";
? ? ? ? ? ? ? ? ? ? ?stringsqlText=@"select contactname,country from customers";
? ? ? ? ? ? ? ? ? ? ?SqlConnectioncon =new SqlConnection(ConnectionString);
? ? ? ? ? ? ? ? ? ? ?if(con.State==ConnectionState.Open)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlDataAdapterda =new SqlDataAdapter(sqlText,con);
? ? ? ? ? ? ? ? ? ? ? ? ? ? //da.SelectCommand=new SqlCommand(sqlText,con);
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataSetds=new DataSet();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Fill(ds,"customers");//填充給DataSet中的Customeres表
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataTabledt=ds.Tables["customers"];
? ? ? ? ? ? ? ? ? ? ? ? ? ? //下面一句就是把dt表中的記錄有賦給了DataView dv 然后對(duì)dv進(jìn)行操作 DataView有自己的動(dòng)態(tài)方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataViewdv =new DataView(dt,"country='Germany'","country",DataViewRowState.CurrentRows);
? ? ? ? ? ? ? ? ? ? ? ? ? ? //其中第一個(gè)參數(shù)是DataTale,第二個(gè)是對(duì)DataTable內(nèi)容進(jìn)行篩選的篩選器,第三個(gè)是排序,最后一個(gè)參數(shù)指定要在視圖中包含的行的類(lèi)型
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowViewdrv in dv)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?for(inti=0;i<dv.Table.Columns.Count;i++)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.Write(drv[i]+ "\t");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch (Exception ex)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Error:"+ ex);
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?finally
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? ?}
?
? ? ? ? ? ? ? }
? ? ? ?4.4)修改數(shù)據(jù)集中的記錄 ? 其實(shí)這個(gè)4.4)單獨(dú)是沒(méi)有意義的 應(yīng)該是4.5以后將更新保存到數(shù)據(jù)庫(kù)源
? ? ? ? ? ?說(shuō)明:對(duì)數(shù)據(jù)集所做的變化不會(huì)自動(dòng)保存到數(shù)據(jù)庫(kù)中,為了把這些變化保存到數(shù)據(jù)庫(kù)中,需要再次連接數(shù)據(jù)庫(kù),顯示完成更新
? ? ? ? ? ?例子:
? ? ? ? ? ? ? staticvoid Main()
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?stringConnetionString=@"data source=localhost;initial catalog=northwind;user id=sa;password=sa;";
? ? ? ? ? ? ? ? ? ? ?stringqry=@"select * from employees where country='UK'";
? ? ? ? ? ? ? ? ? ? ?stringudp=@"update employees set city=@city where employeeid=@employeeid";
? ? ? ? ? ? ? ? ? ? ?SqlConnection con =newSqlConnection(ConnetionString);
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlDataAdapterda= new SqlDataAdapter();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?da.SelectCommand=new SqlCommand(qry,con);
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataSetds=new DataSet(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Fill(ds,"employees");
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataTabledt=ds.Tables["employees"];
? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下更改了表的信息
? ? ? ? ? ? ? ? ? ? ? ? ? ? dt.Columns["FirstName"].AllowDBNull=true;
? ? ? ? ? ? ? ? ? ? ? ? ? ? dt.Rows[0]["city"]="Wilmington";
? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下為表添加了新行
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataRownewRow =dt.NewRow();
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["firstname"]="li";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["lastname"]="yong";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["titleofcourtesy"]="haha";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["city"]="dalian";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["country"]="UK";
? ? ? ? ? ? ? ? ? ? ? ? ? ? dt.Rows.Add(newRow);
? ? ? ? ? ? ? ? ? ? ? ? ? ? //可以顯示更新后的信息 這時(shí)只更新了數(shù)據(jù)集 但是沒(méi)有更新數(shù)據(jù)庫(kù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in ?dt.Rows)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}{1}{2}",row["firstname"].ToString().PadRight(15),row["lastname"].ToString().PadLeft(25),row["city"]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch(Exceptionex)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Error:"+ ex);
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?finally
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? ?}、
?
? ? ? ? ? ? ? 4.5)將變化保存到數(shù)據(jù)源
? ? ? ? ? ? ? ? ? ? ?以下3個(gè)屬性可用于把數(shù)據(jù)集中的數(shù)據(jù)更新和同步到數(shù)據(jù)源(類(lèi)似于支持查詢(xún)的SelectCommand屬性)
? ? ? ? ? ? ? ? ? ? ?*UpdateCommand
? ? ? ? ? ? ? ? ? ? ?*InsertCommand
? ? ? ? ? ? ? ? ? ? ?*DeleteCommand
? ? ? ? ? ? ? ***A)UpdateCommand屬性
? ? ? ? ? ? ? ? ? ? ?SqlDataAdapterda =new SqlDataAdapter();
? ? ? ? ? ? ? ? ? ? ?要想對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改要是動(dòng)態(tài)的必須有參數(shù)
? ? ? ? ? ? ? ? ? ? ?//以下這是第二次操作數(shù)據(jù)庫(kù)(用SqlCommand)進(jìn)行更改
? ? ? ? ? ? ? ? ? ? ?SqlCommandcmd=new SqlCommand(upd,conn);//udp為SQL語(yǔ)句 它是有參數(shù)的
? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@city",SqlDbType.NVarChar,15,"city");//為upd語(yǔ)句設(shè)定兩個(gè)參數(shù)
? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@employeeid",SqlDbType.Int,4,"employeeid");
? ? ? ? ? ? ? ? ? ? ?da.UpdateCommand=cmd;
? ? ? ? ? ? ? ? ? ? ?da.Update(ds,"表名");
? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ?
? ? ? ? ? ? ? staticvoid Main()
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?stringConnectionString =@"data source =localhost;initial catalog=northwind;userid =sa;password=sa;";
? ? ? ? ? ? ? ? ? ? ?stringqry=@"select * from employees where country='UK'";//用于從庫(kù)中取出數(shù)據(jù)進(jìn)行更改用的SQL
? ? ? ? ? ? ? ? ? ? ?stringupd=@"update employees set city=@city where employeeid=@employeeid";//更改的SQL
? ? ? ? ? ? ? ? ? ? ?SqlConnectionconn =new SqlConnection(ConnectionString);
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlDataAdapterda =new SqlDataAdapter();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.SelectCommand=newSqlCommand(qry,conn);
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataSet ds=new DataSet();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Fill(ds,"employees");
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataTabledt=ds.Tables["employees"];
? ? ? ? ? ? ? ? ? ? ? ? ? ? (a)dt.Rows[0]["city"]="Wilmington11";//改后的信息 其實(shí)是SQL update語(yǔ)句的參數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下只是數(shù)據(jù)集做了更改后顯示出來(lái)
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in dt.Rows)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}{1}{2}",row["firstname"].ToString().PadRight(15),row["lastname"].ToString().PadLeft(25),row["city"]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? //這以下才是對(duì)數(shù)據(jù)庫(kù)進(jìn)行的真正更改
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlCommandcmd=new SqlCommand(upd,conn);//udp為SQL語(yǔ)句 它的參數(shù)是(a)
? ? ? ? ? ? ? ? ? ? ? ? ? ? //設(shè)定兩個(gè)參數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@city",SqlDbType.NVarChar,15,"city");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@employeeid",SqlDbType.Int,4,"employeeid");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? da.UpdateCommand=cmd;//修改賦值
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Update(ds,"employees");//修改
?
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch(Exceptionex)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Error:"+ex);
? ? ? ? ? ? ? ? ? ? ?}
?
? ? ? ? ? ? ? ***B)InsertCommand屬性
? ? ? ? ? ? ? ? ? ? ?數(shù)據(jù)適配器使用InsertCommand屬性在表中插入行,調(diào)用Update方法時(shí),將搜索以前添加到表中的說(shuō)有新行,并保存到數(shù)據(jù)庫(kù)中。
? ? ? ? ? ? ? ? ? ? ?staticvoid Main()
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ?stringConnectionString =@"data source=localhost;initial catalog=northwind;userid =sa;password=sa";
? ? ? ? ? ? ? ? ? ? ?stringqry=@"select * from employees where country='UK'"; //第一步 從庫(kù)中取數(shù)據(jù)SQL語(yǔ)句
? ? ? ? ? ? ? ? ? ? ?stringins=@"
? ? ? ? ? ? ? ? ? ? ?insertinto employees(firstname,lastname,titleofcourtesy,city,country) ? //第二步SQL更改語(yǔ)句
? ? ? ? ? ? ? ? ? ? values
? ? ? ? ? ? ? ? ? ? ?(
? ? ? ? ? ? ? ? ? ? ? ? ? ? @firstname,
? ? ? ? ? ? ? ? ? ? ? ? ? ? @lastname,
? ? ? ? ? ? ? ? ? ? ? ? ? ? @titleofcourtesy,
? ? ? ? ? ? ? ? ? ? ? ? ? ? @city,
? ? ? ? ? ? ? ? ? ? ? ? ? ? @country
? ? ? ? ? ? ? ? ? ? ?)
? ? ? ? ? ? ? ? ? ? ?";
? ? ? ? ? ? ? ? ? ? ?SqlConnectionconn =new SqlConnection(ConnectionString);
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlDataAdapterda=new SqlDataAdapter();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.SelectCommand=newSqlCommand(qry,conn);
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataSetds =new DataSet();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Fill(ds,"employees");
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataTabledt=ds.Tables["employees"];//已把原庫(kù)中的數(shù)據(jù)賦值給了dt
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataRownewRow =dt.NewRow();
? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下添加的每列新行就是 下面參數(shù)的要賦的新值
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["firstname"]="li";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["lastname"]="yong";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["titleofcourtesy"]="Sir";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["city"]="Birmingham";
? ? ? ? ? ? ? ? ? ? ? ? ? ? newRow["country"]="UK";
? ? ? ? ? ? ? ? ? ? ? ? ? ? dt.Rows.Add(newRow);//然后為dt添加一個(gè)新行
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in dt.Rows)//把現(xiàn)在的結(jié)果遍例出來(lái)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}{1}{2}",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? row["firstname"].ToString().PadRight(15),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? row["lastname"].ToString().PadLeft(25),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? row["city"].ToString().PadLeft(35)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlCommandcmd =new SqlCommand(ins,conn);//傳遞InsertCommand SQL更改命令
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下是設(shè)定InsertCommand參數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@firstname",SqlDbType.NVarChar,10,"firstname");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@lastname",SqlDbType.NVarChar,20,"lastname");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@titleofcourtesy",SqlDbType.NVarChar,25,"titleofcourtesy");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@city",SqlDbType.NVarChar,15,"city");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cmd.Parameters.Add("@country",SqlDbType.NVarChar,15,"country");
? ? ? ? ? ? ? ? ? ? ? ? ? ? 以下兩句是真正的更改數(shù)據(jù)庫(kù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.InsertCommand=cmd;
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Update(ds,"employees");
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
?
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch(Exceptionex)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Error:"+ex);
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?finally
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? conn.Close();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ***C)DeleteCommand屬性
? ? ? ? ? ? ? DeleteCommand屬性可用于執(zhí)行SQLDELETE語(yǔ)句。
? ? ? ? ? ? ?
? ? ? ? ? ? ? staticvoid Main()
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ?stringConnectionString =@"data source =localhost;initial catalog=northwind;userid =sa;password=sa;";
? ? ? ? ? ? ? ? ? ? ?stringqry=@"select * from employees where country='UK'";//第一步 從庫(kù)中取數(shù)據(jù)SQL語(yǔ)句
? ? ? ? ? ? ? ? ? ? ?stringdel=@"delete from employees where employeeid =@employeeid"; //第二步SQL更改語(yǔ)句
? ? ? ? ? ? ? ? ? ? ?SqlConnectioncon=new SqlConnection(ConnectionString);
? ? ? ? ? ? ? ? ? ? ?try
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? //注釋: 雖然這段代碼用的delete語(yǔ)句用到了參數(shù)whereemployeeid =@employeeid
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//但是在下面又用到了filt 篩選條件 所以明確了用名字來(lái)判斷 那么where employeeid =@employeeid就沒(méi)有意義了
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlDataAdapterda=new SqlDataAdapter();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.SelectCommand=new SqlCommand(qry,con);
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataSetds=new DataSet();
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Fill(ds,"employees");
? ? ? ? ? ? ? ? ? ? ? ? ? ? DataTabledt =ds.Tables["employees"]; ?//把原來(lái)的數(shù)據(jù)庫(kù)中數(shù)據(jù)提取出來(lái)賦給dt
? ? ? ? ? ? ? ? ? ? ? ? ? ? SqlCommandcmd=new SqlCommand(del,con); ?//傳遞DeleteCommand SQL更改命令
? ? ? ? ? ? ? ? ? ? ? ? ? ? cmd.Parameters.Add("@employeeid",SqlDbType.Int,4,"employeeid"); ?//為DeleteCommand添加參數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? stringfilt=@"firstname='li' and lastname='yong'";//篩選條件
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in dt.Select(filt))
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?row.Delete();
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? //以下兩句真正刪除數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.DeleteCommand=cmd;
? ? ? ? ? ? ? ? ? ? ? ? ? ? da.Update(ds,"employees");
? ? ? ? ? ? ? ? ? ? ? ? ? //把現(xiàn)在的結(jié)果集遍例出來(lái)
? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach(DataRowrow in dt.Rows)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Console.WriteLine("{0}{1}{2}",row["firstname"].ToString().PadRight(15),row["lastname"].ToString().PadLeft(25),row["city"]);
? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.ReadLine();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?catch(Exceptionex)
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("Error:"+ ex);
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ?finally
? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? con.Close();
? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? }
? ? ? ?五) 關(guān)于DataRowView 的用法(此時(shí)要想得到listBox選中的數(shù)據(jù)(前提是把數(shù)據(jù)庫(kù)中的數(shù)據(jù)賦給listBox))
? ? ? ? ? ? ? ? ? ? ?DataRowViewrowView=(DataRowView)this.listBox1.Items[this.listBox1.SelectedIndex];
? ? ? ? ? ? ? ? ? ? ?stringstr=rowView.Row.ItemArray[0].ToString();
? ? ? ? ? ? ? ? ? ? ?MessageBox.Show("您選擇的是:"+str,"***這種方法只能這樣寫(xiě)代碼,請(qǐng)看看");
? ? ? ? ? ? ? ***詳見(jiàn)級(jí)聯(lián)菜單的例子
?
? ? ? ? ? ? ?
? ? ? ?用以下的cmd命令可以創(chuàng)建一個(gè)新的iis站點(diǎn):
?
C:\Inetpub\AdminScripts> adsutil.vbscreate_vserv W3SVC/2
C:\Inetpub\AdminScripts> adsutil.vbscopy W3SVC/1 W3SVC/2
?
刪除:
?
C:\Inetpub\AdminScripts> adsutil.vbsdelete W3SVC/2
?
List:
?
C:\Inetpub\AdminScripts> adsutil.vbsenum w3svc /p
?
當(dāng)然,創(chuàng)建了以后也只能同時(shí)運(yùn)行一個(gè)。 ? ? ?
========

總結(jié)

以上是生活随笔為你收集整理的C# 操作Sql Server 学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产午夜精品一区二区三区 | 三级黄色免费 | 天天天干天天射天天天操 | 日韩一区正在播放 | 日韩精品aaa | 久久在线观看 | 国产精品午夜av | 97在线成人 | 久草观看视频 | 国产偷v国产偷∨精品视频 在线草 | 成人免费xxx在线观看 | 久久精品视频在线观看免费 | 日日爽日日操 | 27xxoo无遮挡动态视频 | 午夜国产影院 | 激情黄色一级片 | 久久久久亚洲a | 午夜精品一区二区三区视频免费看 | 久久久久一区二区三区 | 一级黄色免费网站 | 狠狠色狠狠色综合日日小说 | 天天插天天干天天操 | 中文字幕 第二区 | 亚洲国产精品影院 | 天天干天天做天天操 | 久久一级片 | 日韩av不卡在线 | 亚洲欧美日韩一级 | 色网站免费在线观看 | 国产在线国偷精品产拍免费yy | 中文字幕在线视频免费播放 | 久久无码精品一区二区三区 | 成人在线电影观看 | 99 色 | 91亚洲精品在线 | 91在线蜜桃臀 | 91丨九色丨国产在线 | bbb搡bbb爽爽爽 | 久久伊99综合婷婷久久伊 | 97高清免费视频 | 中文字幕中文字幕在线中文字幕三区 | 福利电影久久 | 国产aa精品| 国产精品人成电影在线观看 | 福利区在线观看 | 天天精品视频 | 久草网视频在线观看 | 成年人免费在线播放 | 亚洲精品99久久久久久 | 在线看片中文字幕 | 98精品国产自产在线观看 | 97免费在线观看视频 | 国产精品视频内 | 99精品视频免费观看 | 国产精品2019 | 久久精品美女 | 久久久久女人精品毛片九一 | 91久久精品日日躁夜夜躁国产 | 午夜精品视频免费在线观看 | 欧美日韩性生活 | aa级黄色大片 | 狠狠久久| 亚洲视频播放 | 国产高清免费在线观看 | 中文av在线天堂 | 久久国产精品二国产精品中国洋人 | 日韩精品一区二区在线视频 | 超碰最新网址 | 欧美 日韩 国产 成人 在线 | 久久久国产精品免费 | 91丨九色丨蝌蚪丨对白 | 91精品国产成| 中文字幕影片免费在线观看 | 亚洲国内精品在线 | 亚洲免费激情 | 日韩专区 在线 | 欧美日韩一区二区免费在线观看 | 日韩欧美精品一区二区 | 美女免费av | 日本中文字幕在线视频 | 亚洲成人二区 | 天天想夜夜操 | 九九视频在线观看视频6 | 免费看av在线 | 久久国产精品99国产 | 激情网站免费观看 | 国产一性一爱一乱一交 | 色在线亚洲 | 水蜜桃亚洲一二三四在线 | 国产亚州精品视频 | 久久久国产99久久国产一 | 精品国产一区二区在线 | 特级毛片在线 | 精品国产乱子伦一区二区 | 99亚洲精品在线 | 日韩一级片大全 | 国产无套一区二区三区久久 | 日韩激情第一页 | 九九热国产视频 | 国产第一页精品 | 久久情侣偷拍 | 在线观看成人一级片 | 天天操狠狠操网站 | 亚洲精品电影在线 | 国产区在线看 | 日韩有码在线观看视频 | av福利在线导航 | 91麻豆看国产在线紧急地址 | 福利视频精品 | 亚洲少妇xxxx | 深爱激情五月综合 | 国产精品久久影院 | www操操操 | 美女国产 | 久久久免费视频播放 | 日韩视频一 | 97免费在线观看视频 | 欧美精品999| 五月婷婷久久丁香 | 狠狠五月天 | 国产精品久久久久久妇 | 中文字幕在| 亚洲 在线 | 久久高清av | www99久久 | 中文字幕在线日本 | 日韩在线免费高清视频 | 97在线观看免费高清完整版在线观看 | 国产精品大全 | 91久久精品一区 | 国产 一区二区三区 在线 | 综合激情网... | 欧美在线a视频 | 九九综合九九综合 | 国产精品欧美久久久久无广告 | 碰超在线观看 | 夜夜骑天天操 | 久草视频99 | 视色网站 | 我要色综合天天 | 亚洲精品合集 | 欧美成人播放 | 夜色在线资源 | 国产精品2020 | 国产三级国产精品国产专区50 | 国产不卡在线视频 | 国产亚洲在线观看 | 久久精品亚洲国产 | 久久天天躁狠狠躁亚洲综合公司 | 久久成人国产 | 中文字幕无吗 | 91在线观看视频 | 涩av在线| 国产精品 中文字幕 亚洲 欧美 | 黄色毛片大全 | 亚洲综合射 | 99热最新网址 | 国产手机在线视频 | 亚洲成色777777在线观看影院 | 91精品国产欧美一区二区 | 精品伊人久久久 | 一级做a视频 | 免费人成网ww44kk44 | 99精品免费久久久久久久久 | 欧美日韩免费一区二区 | www.色午夜 | 日韩一三区 | 丁香九月婷婷 | 99爱视频在线观看 | 久久特级毛片 | 国产在线高清视频 | 日韩视频二区 | 久草在线资源网 | 性色av香蕉一区二区 | 在线视频欧美日韩 | 九九在线国产视频 | 国产精品自产拍在线观看网站 | 97在线影视 | 中文字幕在线一区二区三区 | 亚洲欧美视屏 | 色婷婷国产 | 超碰官网| 美女视频永久黄网站免费观看国产 | 久久久久久久免费观看 | 人人干人人爽 | 日韩中文在线观看 | 字幕网av | 久久草网站 | 激情在线网址 | 最新久久免费视频 | 一本一本久久a久久精品综合妖精 | 国产女人18毛片水真多18精品 | 日韩一区二区三免费高清在线观看 | 国产日韩欧美精品在线观看 | 国产一级在线看 | 中文字幕观看视频 | 国产精品初高中精品久久 | 国产理论在线 | 特黄免费av | 五月开心六月伊人色婷婷 | 国产美女无遮挡永久免费 | 国产精品亚洲视频 | 在线观看福利网站 | 成年人在线免费看视频 | 在线观看爱爱视频 | 天天插视频 | 超碰在线1 | 亚洲一区二区视频在线播放 | 永久免费看av | 77国产精品| 福利一区二区三区四区 | 国产精品久久久久久久久久久久午夜片 | 亚洲经典视频在线观看 | 国产精品久久久久9999吃药 | 中文字幕不卡在线88 | 亚洲精品日韩在线观看 | 西西4444www大胆视频 | 国产高清网站 | 国产自产在线视频 | 综合久久久久久久 | 国产96在线视频 | www.色午夜.com | 天天干婷婷 | 日韩在线第一区 | 国产夫妻性生活自拍 | 在线亚洲播放 | 成人国产一区 | 国产一卡久久电影永久 | 免费在线观看av不卡 | 亚洲精品大全 | 国产96在线观看 | 九七人人干 | 日韩无在线 | 国产性天天综合网 | www.天天色.com| 久久在线影院 | 美女国内精品自产拍在线播放 | 成人黄色小说视频 | 亚洲天堂自拍视频 | 免费a视频| 国产裸体视频网站 | 黄www在线观看 | 丁香高清视频在线看看 | 973理论片235影院9 | 天天爱天天操 | 国产精品久久久久一区 | 狠狠操导航 | 人人干人人做 | 国产日韩精品一区二区在线观看播放 | 久久黄色网址 | 天天拍天天干 | 99国产在线| 国产伦精品一区二区三区免费 | 中文字幕在线观看第一区 | 天天草夜夜 | 国产精品久久久久av免费 | 亚洲香蕉视频 | 日日爱网站 | 免费看一级黄色大全 | 欧美色久 | 日日夜夜艹 | 免费看成人| 91视频在线国产 | 国产欧美综合视频 | 99视频+国产日韩欧美 | 一区二区三区免费在线观看 | 欧美精彩视频在线观看 | 久久精品国产精品 | 精品国产免费观看 | 久久成人一区二区 | 日韩大片在线观看 | 一区二区影视 | 久久久久久伊人 | 天天干天天操天天拍 | 黄色三级免费观看 | 91精品视频在线看 | 青青河边草免费观看完整版高清 | 国产日韩精品一区二区在线观看播放 | 国产一级免费av | 国产精品美女 | 成人av高清在线 | 天天综合网在线观看 | 美女黄频免费 | 99热.com| 色综合久久久 | 韩国三级av在线 | 麻豆国产网站 | 国产一区二区免费在线观看 | 黄色网址a| 国产va在线观看免费 | 免费av高清 | 又黄又刺激视频 | 日韩电影中文,亚洲精品乱码 | 尤物九九久久国产精品的分类 | 中文字幕色婷婷在线视频 | 在线观看免费观看在线91 | 国产91精品一区二区麻豆网站 | 久久人人爽人人爽人人片 | 在线国产专区 | 99久久爱 | 亚洲国产高清在线观看视频 | 91私密保健| 中文视频一区二区 | 欧美日韩另类在线观看 | 色婷婷视频在线观看 | 久久不卡av| 最新色视频 | 97超碰成人在线 | 91久久久久久久一区二区 | 欧美极品在线播放 | 黄色免费看片网站 | 亚洲激情视频在线 | 成人av电影免费在线观看 | 亚洲国产精品一区二区久久hs | 日韩免费观看高清 | 黄色a在线 | 操久在线| 久久狠狠干| 久久性生活片 | 欧美日韩在线免费观看 | 又黄又爽又色无遮挡免费 | 全黄色一级片 | 国产精品免费久久久久久久久久中文 | 日本中文字幕在线一区 | 亚洲精品www | 免费亚洲视频 | 射射射av| 免费黄色在线网址 | 亚洲精品网站在线 | 久久精品国产免费看久久精品 | 高清视频一区二区三区 | 91成人精品在线 | 成人xxxx | av在线免费观看网站 | 久久天堂亚洲 | 久久精品导航 | 天堂网av在线 | 最近更新中文字幕 | 在线视频在线观看 | 日韩高清在线不卡 | 欧美精品三级 | 超碰人人国产 | 天天操天天射天天爽 | 91看片成人| 国产精品入口久久 | 婷婷激情站| 久久久久亚洲最大xxxx | 午夜精品中文字幕 | 中文字幕亚洲欧美日韩 | 欧美日韩亚洲在线观看 | 欧美尹人 | 97人人看 | 午夜精品久久久久久久99水蜜桃 | 欧洲一区二区三区精品 | 欧美亚洲精品一区 | 国产精品国产三级国产aⅴ9色 | 欧美精品三级 | 成人作爱视频 | 国产在线a免费观看 | 色综合中文字幕 | 日本成人a | 视频二区在线 | 500部大龄熟乱视频 欧美日本三级 | 久久久麻豆精品一区二区 | 91精品在线视频观看 | 黄a在线| 久久精品视 | 91片黄在线观 | 亚洲精品乱码白浆高清久久久久久 | 黄色一级大片在线免费看国产一 | 97av视频在线 | 伊人欧美 | 久久一区二区三区四区 | 久久久免费在线观看 | 96超碰在线 | 中文字幕在线视频国产 | 久久69精品久久久久久久电影好 | 久久精品爱爱视频 | 日韩a欧美| 国产在线观看一区 | 91麻豆精品国产91久久久使用方法 | 久久在草| 狠狠色伊人亚洲综合网站色 | 中文字幕欲求不满 | aⅴ视频在线 | 久草精品电影 | 国产韩国精品一区二区三区 | 在线免费av播放 | 91在线网址 | 日本中文字幕免费观看 | 久久人人爽人人人人片 | 久久精品视频国产 | 操久久免费视频 | 日韩在线视频网站 | 不卡中文字幕av | 免费亚洲视频在线观看 | 1024在线看片 | 成年人视频在线观看免费 | 毛片网站免费在线观看 | 日韩精品一区电影 | 插婷婷| 亚洲日日射 | 国产一区二区免费看 | 亚洲精品久久久久www | 婷婷网五月天 | 在线观看视频黄 | 午夜aaaa| 久免费视频 | 丁香五月亚洲综合在线 | 国产亚洲成av片在线观看 | 四虎成人精品永久免费av | 中文字幕日韩无 | 亚洲成av人片一区二区梦乃 | 91 在线视频 | 日韩中文字幕91 | 在线观看岛国av | 人人插人人艹 | www.久久91| 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 午夜性生活片 | 欧美视频二区 | 在线99| 精品国产91亚洲一区二区三区www | 成人毛片在线观看 | 国产福利精品在线观看 | 国产精品高潮呻吟久久av无 | 国产精品免费观看网站 | 亚洲欧美国产精品va在线观看 | 六月丁香综合网 | 国产精品涩涩屋www在线观看 | 日韩大片在线免费观看 | 91日韩免费 | 99精品视频在线 | 深爱五月激情网 | 日本不卡久久 | 国产精品免费久久久久 | 在线高清 | 日韩手机在线观看 | 美女网站在线观看 | 久久麻豆视频 | 亚洲视频999| 国产精品自产拍在线观看网站 | 亚洲美女在线一区 | 日韩免费av网址 | 国产精品免费成人 | 色国产精品 | 麻豆91精品91久久久 | 午夜少妇一区二区三区 | 午夜电影久久久 | 亚洲视频一 | 涩涩在线 | 日韩成人看片 | 视频91在线 | 伊人电影天堂 | 91精品人成在线观看 | 在线日韩中文 | 亚洲六月丁香色婷婷综合久久 | www91在线观看 | 亚洲在线视频播放 | 欧美成人999 | 日韩有码中文字幕在线 | 欧美精品在线免费 | 狠狠操狠狠插 | 亚洲免费一级电影 | 亚洲精品一区二区精华 | 91片黄在线观 | 亚洲片在线观看 | 亚洲精品美女免费 | 午夜精品福利影院 | 一区二区 久久 | 99爱视频在线观看 | 国产成人一级 | 97国产大学生情侣酒店的特点 | 国产精品色婷婷 | 六月色婷 | avove黑丝 | 亚洲精品中文在线观看 | 日韩成人不卡 | 美女免费网站 | 99久久这里有精品 | 亚洲婷婷网 | 在线观看91视频 | 欧美男女爱爱视频 | 久久久福利视频 | 午夜av激情 | 欧美在线一二 | 操处女逼 | 色视频网页 | 狠狠色丁香久久婷婷综 | 亚洲精品国产精品久久99热 | 永久免费精品视频 | 人人澡人| 96久久 | 久久精品视频4 | 日韩一级黄色片 | 久久精品在线 | 亚洲中字幕 | 夜夜夜夜爽 | 一区二区视频电影在线观看 | 色94色欧美 | www.狠狠色| 国产黄在线观看 | 国产日韩精品一区二区三区在线 | 久久免费福利视频 | 97超级碰碰 | 日韩精品中文字幕av | 一区二区精品视频 | 在线亚州| 男女日麻批 | 久久精品高清 | 久久成人国产精品一区二区 | 日韩综合视频在线观看 | 亚洲天堂精品视频在线观看 | 久久久久美女 | 午夜av色 | 91完整版观看 | a√资源在线 | 一本到视频在线观看 | 天天色成人网 | 久久五月婷婷丁香 | 日日草视频 | 黄网站a | 日韩 在线观看 | 亚洲精品女人久久久 | 国产在线不卡一区 | 最新久久久 | 亚洲精品久久久久久久不卡四虎 | 国产偷国产偷亚洲清高 | 日韩精品免费在线观看 | 国产精品video爽爽爽爽 | 久久久91精品国产一区二区三区 | 中文字幕在线观看视频一区 | 果冻av在线 | 操操操com | 久久国产精品视频 | 草在线 | 在线播放 日韩专区 | 91精品啪 | 国产精品国内免费一区二区三区 | 99久精品 | 午夜性盈盈 | 91片黄在线观 | 国产91电影在线观看 | 91激情 | 久久久精品日本 | 国产精品自在线 | 欧美一级日韩三级 | 免费一级毛毛片 | 99久久超碰中文字幕伊人 | 在线观看av小说 | 国产伦精品一区二区三区四区视频 | 免费午夜av | 亚洲综合网站在线观看 | 国产免费a | 色在线中文字幕 | 中文字幕中文字幕在线一区 | 日韩色综合网 | 亚洲九九 | 成人av片免费看 | 521色香蕉网站在线观看 | 99综合久久 | 成人91av | 国产精品一区二区麻豆 | 亚洲综合日韩在线 | 国产精品扒开做爽爽的视频 | 天天色天天射天天操 | 中文视频在线看 | 综合网伊人 | 毛片网站在线看 | 缴情综合网五月天 | 91精品999| 亚洲欧美日韩不卡 | 黄色大片日本 | 国产免费激情久久 | av大片免费看 | 日韩久久精品一区二区 | 午夜av免费观看 | av电影中文| 91成人国产 | 欧美精品乱码久久久久久 | 亚洲影音先锋 | 欧美巨大| 夜夜爱av | 天天操·夜夜操 | www日韩在线观看 | 亚洲综合涩| 亚洲少妇影院 | 免费成视频 | 欧美精品久久久久久久久老牛影院 | 亚洲一区天堂 | 视频国产 | 日韩av一区二区三区 | 亚洲精品综合一区二区 | 国产小视频免费在线观看 | 国产高清精品在线观看 | 日本在线中文 | 99国产精品久久久久老师 | 在线激情网 | 亚洲精品看片 | 亚洲视频免费在线 | 日韩欧美有码在线 | 久久免费视频6 | 一区二区三区免费 | 伊人开心激情 | 亚洲精品777 | 国产亚洲婷婷免费 | 久草在线 | 国产精品av在线免费观看 | 国产视频精品久久 | 亚洲v欧美v国产v在线观看 | 91桃色免费视频 | 中文字幕人成不卡一区 | 在线成人一区 | 麻豆国产精品va在线观看不卡 | 久久 在线| 综合成人在线 | 日韩精品视频网站 | 久久久久久久久精 | 五月婷网站 | 亚洲视频中文 | 在线黄频 | 九九热免费观看 | 在线观看成人小视频 | 亚洲最大成人网4388xx | 最近日本字幕mv免费观看在线 | 国产精品美女在线 | 国产成人精品999 | 一区三区视频在线观看 | 香蕉影院在线播放 | 久久久久久久久久久免费 | 日韩在线播放av | 欧美一区二区三区在线播放 | 日韩精品视频网站 | 亚洲黄色片 | 91av影视 | 黄色电影小说 | 91精品久久香蕉国产线看观看 | 日日操天天爽 | 97视频免费播放 | 国产精品99在线观看 | 999久久久久 | 99tvdz@gmail.com| 丰满少妇一级片 | 日韩在线高清免费视频 | 五月婷婷丁香色 | 久久久高清视频 | 午夜免费在线观看 | 国产精品久久久久久久久婷婷 | 亚洲国产精品久久久久婷婷884 | 中文一区二区三区在线观看 | 成人免费观看大片 | 久精品一区| 免费成人av在线看 | 天天躁天天狠天天透 | 91夜夜夜| 91中文字幕网 | 国产精品女人网站 | av免费网页| 国产乱老熟视频网88av | 韩国三级在线一区 | 日韩和的一区二在线 | 色视频网站在线 | 成人中文字幕在线 | 亚洲六月丁香色婷婷综合久久 | 97av视频在线观看 | 天天干天天拍天天操天天拍 | 99精品欧美一区二区三区 | 久久久私人影院 | 久久精品亚洲 | 精品亚洲免费视频 | 久操久| 精品视频久久久 | 日日干美女 | 日韩精品第1页 | 国产小视频在线看 | 国产在线观看免费 | 九九免费观看视频 | 四虎在线免费观看 | 欧美做受高潮1 | 奇米影视在线99精品 | 国产一区二区在线观看视频 | 国产精品一区二区三区在线播放 | 日本丶国产丶欧美色综合 | 色婷婷婷 | 97超视频在线观看 | 国产精品一区二区三区在线 | 国产精品久久久久久久免费大片 | 黄色影院在线免费观看 | 99久久久成人国产精品 | 综合五月婷婷 | 99久久www| 97电影在线看视频 | 九九热免费在线观看 | 日本黄色免费在线观看 | 久久久精品欧美 | 中文字幕有码在线观看 | 91精品国产麻豆国产自产影视 | 亚洲日韩欧美视频 | 97操碰 | 久久精品专区 | 亚洲国产手机在线 | 色综合久久久久久久久五月 | 国产手机视频 | 久久爽久久爽久久av东京爽 | 久久精品视频在线播放 | 精品国产一区二区三区男人吃奶 | 一级成人在线 | 精品久久久久一区二区国产 | 婷婷在线综合 | 黄色毛片网站在线观看 | 中文字幕在线视频网站 | 91在线看片 | 91高清一区 | 四虎成人精品 | 在线观看视频免费播放 | 久久国产美女视频 | 久久伊人八月婷婷综合激情 | 成人国产精品久久久 | 一级淫片a | av在线播放免费 | 午夜三级影院 | 亚洲国产一区二区精品专区 | 免费色视频| 91麻豆精品国产91久久久无需广告 | 91精品欧美一区二区三区 | 三级黄色在线 | 中文字幕超清在线免费 | 亚洲久草在线视频 | 久久高清| 久久国产精品久久精品国产演员表 | 久艹在线观看视频 | 91精品中文字幕 | 成年人电影免费在线观看 | 国产这里只有精品 | 久久伊人精品天天 | 综合久久影院 | 色999五月色 | 国产亚洲精品久久久久久大师 | 中文字幕人成人 | 国产精品99蜜臀久久不卡二区 | 欧美视频在线观看免费网址 | 一区在线观看 | 高清国产午夜精品久久久久久 | 五月婷婷视频 | 国内精品久久久久久中文字幕 | 日韩欧美一区二区三区视频 | 日日夜av| 久久久久99精品成人片三人毛片 | 狠狠干中文字幕 | 亚洲3级 | 在线观看国产高清视频 | av在线播放快速免费阴 | 米奇狠狠狠888| 国模精品在线 | 日韩二区三区在线 | 国产大片免费久久 | 黄色小说视频在线 | 午夜色大片在线观看 | 久久婷婷网| 精品国产电影一区 | 国产免费观看久久黄 | 91激情| 天天拍天天干 | 国内外成人免费在线视频 | 在线激情影院一区 | 中文字幕在线观看av | 欧美日韩中字 | 激情黄色av | 中文字幕av在线电影 | 99热精品国产一区二区在线观看 | 玖操| 日本黄色一级电影 | 99爱视频在线观看 | 亚洲国产精品久久 | 91.精品高清在线观看 | 九九免费在线观看视频 | a电影免费看 | 丁香影院在线 | 日韩免费在线网站 | 亚洲永久字幕 | 精品久久久久国产免费第一页 | 在线电影日韩 | 操久在线 | 国产精品美女久久久久久网站 | 黄色av播放 | 超碰国产在线 | 99久久日韩精品视频免费在线观看 | 亚洲成av人片在线观看 | 九月婷婷色| 91精品国产一区 | 911av视频| 国产精品2019 | 日韩欧美国产激情在线播放 | 色人久久 | 免费看的黄色片 | 欧美一区二区在线 | 久久久免费看视频 | 麻豆va一区二区三区久久浪 | 国产99爱 | 香蕉视频日本 | 97高清视频 | 日韩,中文字幕 | 五月婷婷丁香网 | 国产精品激情偷乱一区二区∴ | 国产成人精品福利 | 99国内精品久久久久久久 | 五月综合网站 | 81精品国产乱码久久久久久 | 日韩啪啪小视频 | 欧美一区二区精美视频 | 2019国产精品 | 亚洲精品av中文字幕在线在线 | www久| 91精品国产高清自在线观看 | 在线免费观看涩涩 | 国产黄色成人av | 免费看日韩片 | 91av视频在线观看 | 91成人精品国产刺激国语对白 | 国产探花视频在线播放 | 日本一区二区三区视频在线播放 | 九九免费精品 | 精品久久久久久国产偷窥 | 国产精品精品国产婷婷这里av | 亚洲精品色| 麻豆一精品传二传媒短视频 | 免费看黄视频 | 天天干天天玩天天操 | 国产成人一区二区啪在线观看 | 日韩精品一区二区三区第95 | 日日夜夜天天射 | 最新99热| 91av视屏| 久久精品视频日本 | a√天堂中文在线 | 欧美少妇影院 | 99精品视频网站 | 麻豆一区在线观看 | 人人插人人干 | 91在线最新 | 亚洲精品av中文字幕在线在线 | 国语黄色片 | 美女福利视频在线 | 涩涩资源网 | 日日夜夜草| 亚洲精品在线观看网站 | 日日夜夜精品视频天天综合网 | 久久久久欠精品国产毛片国产毛生 | 久久男人免费视频 | 奇米影视在线99精品 | 亚洲三级在线 | 中文字幕在线一区二区三区 | 综合中文字幕 | 91精品一区国产高清在线gif | 国产精品永久久久久久久久久 | 日本久久久精品视频 | 96视频免费在线观看 | 亚洲欧美视频在线观看 | 中文字幕在线乱 | 美国av大片| 狠狠精品 | 久久狠狠婷婷 | 久久久久久高潮国产精品视 | 亚洲精品网址在线观看 | 亚洲视频播放 | 日韩精品网址 | 色妞久久福利网 | 999国产精品视频 | 国产成人精品一区二区三区在线 | 日韩电影一区二区在线观看 | 九九视频网 | 欧美嫩草影院 | 久久久网 | 国产精品第三页 | 欧美精品小视频 | 中文字幕一区二区三区四区 | 国产亚洲精品久久19p | 免费日韩精品 | 最新极品jizzhd欧美 | 伊人色综合网 | 精品中文字幕在线 | 日女人电影 | 精品在线观看视频 | 91福利视频免费观看 | 超碰在线最新地址 | 美女黄频在线观看 | 欧美精品久久久久a | 色天天综合久久久久综合片 | 一区二区三区不卡在线 | 婷婷综合伊人 | avove黑丝| 亚洲午夜精品久久久 | 久久理论电影网 | 欧美日韩在线观看一区二区 | 91九色精品 | 人九九精品| 国产精品涩涩屋www在线观看 | 四虎成人av | 免费观看黄色12片一级视频 | 国产精品久久久久久一二三四五 | 色多多在线观看 | 久久精品国产第一区二区三区 | 精品欧美小视频在线观看 | 美女视频又黄又免费 | 中文字幕第一页在线播放 | 在线免费视频 你懂得 | 美女免费黄视频网站 | 91九色自拍| 日韩在线色视频 | 欧美成人亚洲成人 | 黄色1级毛片 | 亚洲国产日韩欧美 | 天天操福利视频 | 欧美日韩国产综合网 | 久久免费国产电影 | 综合在线观看色 | 日日草视频 | 久久精品国产第一区二区三区 | 国产精品色在线 | 成年人在线观看视频免费 | 九九九电影免费看 | 久久久亚洲电影 | 精品专区一区二区 | 在线观看国产一区 | 91麻豆精品国产自产在线游戏 | 国产污视频在线观看 | 国产精品99页 | 色欧美成人精品a∨在线观看 | 人人干在线 | 99视频免费在线观看 | 夜夜视频 | 国产福利a | 国产精品久久久久9999 | 在线观看成年人 | 婷婷网址| 国产精品美女毛片真酒店 | 欧美专区国产专区 | 国产资源网站 | 高清视频一区二区三区 | 粉嫩av一区二区三区四区五区 | 国产香蕉97碰碰碰视频在线观看 | av中文在线观看 | 欧美日韩国产精品爽爽 | 中文字幕亚洲综合久久五月天色无吗'' | 日韩亚洲欧美中文字幕 | av 一区二区三区四区 | 亚洲天天摸日日摸天天欢 | 国产色在线观看 | 国内成人av| 日韩性色| 免费男女羞羞的视频网站中文字幕 | 一区二区 久久 | 国产又粗又猛又爽又黄的视频免费 | 成人91在线 | 人人爽爽人人 | 一区二区不卡视频在线观看 | 手机看片中文字幕 | 国产在线观看h | 久久精品视频播放 | 精品国产诱惑 | 九九久久影视 | 成人永久视频 | 欧美色噜噜噜 | 一区二精品 | 久久久久久久看片 | 国产成人精品一区二区在线 | 欧美色精品天天在线观看视频 | 国产一区二区三区午夜 | 西西人体4444www高清视频 | 亚洲精品影视在线观看 | 日韩高清dvd | 免费一级片在线 | 激情综合色图 | 丝袜美腿在线播放 | 成人免费观看网址 | 日韩专区在线 | 婷婷久久一区二区三区 | 91观看视频 | 911国产精品 | 亚洲 精品在线视频 | 亚洲高清在线视频 | 成人午夜剧场在线观看 | 91传媒激情理伦片 | 亚洲精品一区二区三区新线路 | 亚洲成aⅴ人在线观看 | 国产99中文字幕 | 亚洲最大在线视频 | 免费看在线看www777 | 在线免费国产 | 亚洲在线色 | 激情电影在线观看 | 中文字幕一区二区在线播放 | 欧美日韩国产色综合一二三四 | 久久免费a | 性色av免费看 | 99久热在线精品视频成人一区 | 色婷婷色| 97视频免费播放 |