Sql Server + ADO.NET

MsSql-
http://www.cnblogs.com/zhangwei595806165/archive/2012/02/23/2364746.htmlhtml

協議:
Shared Memory :效率最高,在內存中操做,是能用於本機,用.或(local)就等登陸
Named Pipes :Winodows與Windows交流的協議,機器名交流,通常用不到
Tcp-Ip :經過IP地址訪問服務器 _用Ip地址登陸web

字段的數據類型:
Image 可用來存儲圖像,以二進制數據存儲,但圖片放進數據庫效率很低。sql

以文本方式存儲:
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範圍更大更廣,八個字節存儲一個數據。c#

日期類型windows

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 UserName=@UserName and UserPwd=@UserPwd
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;

--視圖(待更新)

--索引(待更新)

--事物(待更新)

--存儲過程(待更新)

相關文章
相關標籤/搜索