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