天天看點

Sql Server + ADO.NET

MsSql-

http://www.cnblogs.com/zhangwei595806165/archive/2012/02/23/2364746.html

協定:

Shared Memory :效率最高,在記憶體中操作,是能用于本機,用.或(local)就等登入

Named Pipes :Winodows與Windows交流的協定,機器名交流,一般用不到

Tcp-Ip :通過IP位址通路伺服器 _用Ip位址登入

字段的資料類型:

Image 可用來存儲圖像,以二進制資料存儲,但圖檔放進資料庫效率很低。

以文本方式存儲:

Char(1-8000) 定長字元資料,空格補齊,低于五個字元最好使用char

Varchar(1-8000)定長字元,字元少會空格補齊,性能高

Nchar(1-4000) 固定長度,兩個位元組存儲一個字元,空間換時間

Nvarchar(1-8000)可變長字元資料,字元不會補齊,兩個位元組存儲一個字元但搜尋時效率會低

varchar(MAX)/nvarchar(MAX):存儲大資料的文本,2005之前用text,text不能用模糊查詢

精确數值存儲:

bit :0/1/null

int :四位元組存儲一個資料

bigint:比int範圍更大更廣,八個位元組存儲一個資料。

日期類型

datetime: 1753.1.1~9999.12.31,表示一個完整的日期類型

datatime2 :最早甚至可以追溯到中華文明五千年。。。。大部分用datetime就足夠

time:小時:分鐘:秒 主要存儲時間

t-sql建表:

create database 資料庫名

on[(

name='',

size=.;

filename='絕對路徑'

)]

create table 表名(

字段名 類型 是否為可空(預設為空) 限制

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

限制:

主鍵限制:不能為空 primary key

外鍵限制:foreign key 外鍵的列與列最好要一樣。 referecnces 關聯的表(字段)

唯一限制:unique

自增:辨別種子和辨別增量中設定。

檢查限制:check,檢查可以在c#程式中檢查,在資料庫中設定檢查會消耗效率。

預設限制:default('預設值')

非空限制:not null ,預設為null

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

sql的執行順序--先找到表,分組,查詢資料。

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

CRUD:

增:insert into 表名(列名) values() // values中需要對應列名的順序

删:delete from 表名 ...

改:update 表名 set 列名=值 ...

查:select 字段 from 表名 ...

聚合函數:

Sum :取和

Avg :求平均值

Count:計算次數

Min/Max:求最大或最小

排序: 前面top關鍵字,order by 列名 desc( 降序)預設升序 asc

去重複: distinct select distinct 字段 from... 判斷字段是否重複,對後面所有的列進行去重複

分組: group by 列名 select後面隻能跟 group by 後面的字段或聚合函數

分組後查詢: group by 後面+having

Ado.Net-------------------------------

通路資料庫的驅動-ado.net

SqlConnection:

負責連接配接資料庫。伺服器Ip,使用者名,密碼,資料庫名。

Disponse(釋放)後不能在被Open

Open之後不能再次Open

連接配接池:通過連接配接字元串配置連接配接池,當連接配接池中有連接配接時,不建立新連接配接,使用連接配接池中的連 接。實作了連接配接對象重用的效率

--一個連接配接字元串對應于一個連接配接池

server=.;uid=sa;pwd=123;database=... //通過使用者名密碼連接配接

server=.;Integrated Security=SSPI;database=... //通過windows驗證連接配接

SqlCommand:sql指令的封裝,有重載,可以把connection直接給sqlcommand

-ExecuteNonQuery():傳回執行sql語句後幾行受影響,傳回int類型

-ExecuteScalar() :傳回查詢結果第一行,第一列的資料,傳回Object

-ExcuteReader() :傳回一個reader,指針,指向表的标頭,傳回SqlDataReader

SqlDataReader:線上的讀取資料,當讀取中,不允許關閉connection管道。

-Read():指向下一行資料,每次執行都指向下一行,傳回bool類型,可作為循環判斷值

讀取資料:用SqlDataReader執行個體化後的對象加具體的列名或索引讀取。如read["AA"]

-GetXXX:如GetString,擷取目前行的某一列的值

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

DataReader與DataAdapter的差別:

DataReader是線上的讀取,在讀取中,連接配接管道要一直開啟,不能關閉

DataReader要通過SqlCommand執行Sql語句之後,用DataReader讀取。

适用于資料量龐大的情況

DataAdapter是離線的讀取,甚至不用打開管道,Fill方法中自動判斷。

DataAdapter不用顯示的聲明Sqlcommand,也不用顯示的打開管道。DataAdapter初始化後會自動判斷是否打開管道,并且自動建立SqlCommnd對象并執行。

适用于資料量小的情況

SqlDataAdapter資料通路擴充卡------------------

擴充卡:把一個不符合規範的資料,适配成符合規範的資料

SqlDataAdapter初始化後:

會判斷是否打開連接配接,

并自動建立一個SqlCommand對象、

通過command對象執行Sql語句,

并傳回一個SqlDataReader對象。

讀取查找到的資料後填充到DataTable中

資料 → SqlDataAdapter → DataSet/DataTable

配置檔案,config--------------

config檔案的更多詳細資訊:http://www.cnblogs.com/fish-li/archive/2011/12/18/2292037.html

把可能需要改動的資料,放在App.config或web.config

<connectionStrings>

<add name="SqlConfig" connectionString="server=.;Integrated Security=SSPI;database=db_Demo"/>

</connectionStrings>

那我們怎麼用呢?記得引用system.configuration.dll

ConfigurationManager.ConnectionString

Sql注入漏洞------------

使用者在輸入的地方,利用特殊字元,過掉判斷。

T-sql語言中@...被當成一個變量

select * from database where [email protected] and [email protected]

cmd.Parameters.Add(參數,參數的值) 如 cmd.Parameters.Add("@UserName",123)//此方法過時

參數化Sql,如果其中有特殊字元,會自動進行轉碼,過濾掉特殊字元。

or

SqlParameter parameter = new SqlParameter("@A", SqlDbType.NVarChar);

parameter.SqlValue = "200";

cmd.Parameters.Add(parameter);

DataSet(資料表的集合),DataTable(資料列的集合)-----------------------

DataSet:離線資料集

一個DataSet中包含很多DataTable ,一個DataTable中包含很多DataColumn(資料列)

DataTable:離線資料表

當找到到資料填充到資料表之後,

周遊之後封裝成強類型對象,把強類型對象給資料源。

-建立一個資料庫實體類,把查到的資料賦給強類型對象

List<DemoInfo> demo = new List<DemoInfo>(); //DemoInfo為資料庫實體類

foreach (DataRow dr in dt.Rows)

{

Console.WriteLine(dr["A"] + " " + dr[1]);

demo.Add(new DemoInfo

{

AAA = dr["A"].ToString(),

BBB = dr["B"].ToString(),

CCC = dr["C"].ToString(),

});

}

dgvUserInfo.DataSource = demo;

--視圖(待更新)

--索引(待更新)

--事物(待更新)

--存儲過程(待更新)

轉載于:https://www.cnblogs.com/Zhang-silence/p/6415601.html