數據庫和ado

 

數據庫和ADOnode

  1. 數據庫語言
  2. 數據庫的簡易流程(數據庫客戶端軟件和數據庫服務軟件的執行流程)
  3. 主鍵的概念
  4. 如何建立主鍵
  5. 如何建立外鍵
  6. 主外鍵關係的概念以及使用
  7. 數據庫的主要類型
  8. 數據庫的主要數據類型
  9. 使用SQL語句來建立數據庫和表
  10. 約束分類
  11. top的使用
  12. Distinct的使用(去除重複數)
  13. 聚合函數
  14. 聚合函數注意事項
  15. between and 和 in 的使用
  16. like, not like 通配符(%,_,[],^)
  17. 空值處理:null 是什麼?
  18. 排序(order by id asc / desc)(默認是哪種排序?)
  19. 分組(group by ),單條件分組,多條件分組(分組時,要注意的事情[位置,列])
  20. 篩選(Having的使用),它和where的區別
  21. 類型轉換(CAST,CONVERT)
  22. union,union all的使用
  23. 一次插入多條數據
  24. 字符串函數
  25. ADO.NET主要類
  26. 數據庫鏈接字符串
  27. SqlConnection類的State屬性
  28. SqlCommand類的方法:
  29. StatementCompleted事件的觸發
  30. 得到剛剛插入數據庫的自增id
  31. Sql注入攻擊(避免方式?)
  32. 如何使用迭代生成樹形菜單
  33. 單例模式(單例模式的建立)
  34. DataTable的使用
  35. 類SqlDataAdapter的使用(重點)
  36. 類SqlCommandBuilder的使用(注意:他必須操做的是有主鍵的數據庫)
  37. 提取查詢語句,封裝SqlHelper類(不只要會,並且要理解思想)
  38. SQL中的Switch語句
  39. SQL中的子查詢
  40. SQL中的Exists用法
  41. SQL中的Any
  42. SQL中的All
  43. SQL2008 微軟官方推薦分頁方式
  44. SQL中表等值鏈接(內鏈接) inner join
  45. SQL中表左鏈接(左外鏈接) left join
  46. SQL中表右鏈接(右外鏈接) right join
  47. SQL中表交叉鏈接(兩張表的乘積)
  48. SQL中表全鏈接 full join
  49. SQL中變量
  50. SQL中的事務
  51. 建立存儲過程
  52. 存儲過程帶輸出參數
  53. 調用存儲過程
  54. 觸發器定義
  55. 觸發器類型:
  56. 觸發器觸發條件:
  57. 什麼是索引
  58. 索引類型
  59. 什麼是填充因子
  60. 什麼是臨時表
  61. 什麼是局部臨時表
  62. 什麼是全局臨時表
  63. 什麼是三層結構
  64. 三層結構的目的
  65. 具體的三層是哪三層
  66. 三層之間的關係
  67. 三層結構的優缺點
  68. 郵件發送方法
  69. Excel導入導出
  70. MD5加密解密方法
  71. 讀取數據庫後,判斷dataset裏列的值是否爲空
  72. 項目術語
  • 數據庫語言
    • DML(數據操做語言)
      • select
      • insert
      • delete
      • update
    • DDL(數據定義語言--建表建庫等)
      • creat
      • drop
      • alter
    • DCL(數據控制語言)
      • grant
      • revoke
  • 數據庫的簡易流程(數據庫客戶端軟件和數據庫服務軟件的執行流程)
    • 安裝時有一個客戶端管理軟件和一個服務器。咱們日常操做的是客戶端軟件,發送腳本到服務器DMSM(數據庫服務器),服務器分析和解析並展現執行結果。
  • 主鍵的概念
    • 惟一的標識一行數據操做
    • 能夠做爲其餘表的外鍵來引用
    • 業務主鍵:有意義(例:身份證號)
    • 邏輯主鍵:惟一的意義就是標識一行
  • 如何建立主鍵
    • ALTERTABLE [dbo].[OperateType]
      ADDCONSTRAINT [PK_OperateType]
      PRIMARY KEY CLUSTERED ([Id] ASC);
      GO 
  • 如何建立外鍵
    • ALTERTABLE [dbo].[RoleAction]
      ADDCONSTRAINT [FK_RoleAction_Role]
      FOREIGN KEY ([Role_RoleId])
      REFERENCES [dbo].[RoleInfo]
      ([RoleId])
      ON DELETE NO ACTION ON UPDATE NO ACTION;
      GO
  • 主外鍵關係的概念以及使用
    • 做用
      • 能夠優化查詢效率
      • 減小數據冗餘
      • 維護方便
    • 兩張聊存在依賴數據時,就可使用主外鍵來解決,其中將依賴列做爲主鍵的就叫做:主鍵表;另外一個就叫做外鍵表,外鍵表的外鍵列數據取自主鍵表的主鍵
    • 主外鍵約束
      • 爲何
        • 爲了不兩張表的主外鍵數據出現不一致的狀況,須要創建主外鍵約束關係
      • 做用
        • 當兩張表數據修改時出現主外鍵數據不一致,則報錯,拒絕修改
  • 數據庫的主要類型
    • 網狀數據庫、層次數據庫和關係數據庫
  • 數據庫的主要數據類型
    • char類型:當儲存的數據小於長度時,會自動用空格來補充
    • Nchar類型:使用Unicode編碼,任意字符都佔兩個字節
    • varchar類型:當儲存的數據小於長度時,不會自動用空格來表示
    • datetime類型:儲存日期時間數據
  • 使用SQL語句來建立數據庫和表
    • 建立數據庫
      • createdatabase MySchool
        on
        (
        --括號必定是圓括號
        name='MySchool_data',--數據庫名稱
        filename='d:\MySchool_data.mdf',--物理文件名
        size=5mb,--初始大小
        maxsize=10mb,--最大大小
        filegrowth=15% --主文件增加率
        )
        log on
        (
        name='MySchool_log',--日誌文件名
        filename='d:\MySchool_log.ldf',--日誌物理文件名
        maxsize=4mb,--最大大小
        size=2mb,
        filegrowth=1mb
        )
        go
    • 建立表
      • createtable Student
        (--建立學生信息表
            sId int identity(1,1) primary key,--自動編號
            sClassId int not null,    --班級外鍵
            sName nvarchar(50) not null,
            sAge int not null,
            sNo numeric(18,0),--身份證號,十八位數字,小數爲
            sSex char(2) not null,
            sEmail varchar(50)
        )
  • 約束分類
    • 非空約束
      • altertable Employees altercolumn EmpName varchar(50)notnull
    • 主鍵約束
      • altertable Score
        addconstraint PK_Score primarykey(sId)
    • 惟一約束
      • altertable student
        addconstraint UQ_student unique(sNo)
    • 默認約束
      • altertable student
        addconstraint DF_student default('男')for sSex
    • 檢測約束
      • altertable student
        addconstraint CK_student check(sAge>=18 and sAge <=100)
    • 外鍵約束
      • altertable Employees
        addconstraint FK_DeptId_DepId foreignkey(DeptId)references Department(DepId) 
  • top的使用
    • selecttop 2 * from teacher
    • selecttop 20 percent * from teacher--按百分比算行數,若是出現小數,則+1(相似天花板函數celling)
  • Distinct的使用(去除重複數)
    • selectdistinct(age)from teacher --求出不重複的age
    • selectdistinct age,salary from teacher --求出不重複的age和salary的組合(至關於將兩個列的值加在一塊兒的值不重複)
  • 聚合函數
    • MAX(最大數)
      • SELECT max(UserId),UserId from dbo.UserInfo GROUPBY UserId
    • MIN(最小數)
      • SELECT min(UserId),UserId from dbo.UserInfo GROUPBY UserId
    • AVG(平均數)
      • SELECT avg(UserId),UserId from dbo.UserInfo GROUPBY UserId
    • SUM(和)
      • SELECT sum(UserId),UserId from dbo.UserInfo GROUPBY UserId
    • COUNT(計數)
      • SELECT COUNT(UserId),UserId from dbo.UserInfo GROUPBY UserId
  • 聚合函數注意事項
    • 聚合函數對NULL值不計算
    • 聚合函數的結果集是單個的值,沒辦法與多個值的結果集集合
    • 不能整除的狀況
      • 該列是小數列:若是除出來是小數,則返回帶小數的結果
      • 該列是整數列:若是除出來是小數,也是直接當整數算,不會自動+1
  • between and 和 in 的使用
    • betwenn and
      • 求兩個值的區間,推薦使用between and
      • select * from UserInfo where ID between 40 and 50
    • in
      • 當使用子查詢配合in關鍵字時,子查詢的結果集必須只有一個列,並且列的類型必須和條件列類型一直
      • select * from UserInfo Where ID in (40,41)
      • select * from teacher where id in (select id from Score where English>98 and Math> 98)
  • like, not like 通配符(%,_,[],^)
    • ^只有MSSQLServer支持,其餘DBMS用not like,且只能放在[]裏用
    • not like 不取like的值
    • _    表明單個任意字符;
    • %    表明任意長度任意字符
      • Select * from student where sName like '張%'
    • []    表明取值範圍內的單個字符
    • ^    取非符號,必須和[]連用
  • 空值處理:null 是什麼?
    • 查詢列中null的值用is關鍵字
      • select *from teacher where name is NULL
    • isnull函數
      • 若是第一個參數爲null,則使用第二個參數做爲返回值,不然,返回第一個參數
      • SELECT ISNULL (Email,'aaa')as Email from UserInfo
  • 排序(order by id asc / desc)(默認是哪種排序?)
    • order by 子句要放到where子句以後
    • asc--默認是升序
      • select * from UserInfo where Sort=0 orderby id asc
    • desc--降序
      • select * from UserInfo orderby Phone desc,IDdesc
      • 多條件排序時,如上,當Phone中有相等的值,那麼這些值按ID排序
  • 分組(group by ),單條件分組,多條件分組(分組時,要注意的事情[位置,列])
    • 根據性別統計男女的人數
      • select count(*) gender from teacher groupby gender
      • group by 子句必須放到where語句以後,group by 與 order by 都是對篩選後的數據進行處理,而where是用來篩選數據的
    • 多條件分組
      • 分組條件,是age和gender列的組合,只有當age和gender同樣的值時,才分爲一組
      •         select count(*),age, gender from teacher groupby age,gender
    • 分組通常和聚合函數使用的
    • 分組的結果是組信息,與表裏的當行信息無關
    • 一旦出現分組,前面要麼是聚合函數,要麼是分組的條件
  • 篩選(Having的使用),它和where的區別
    • having是group by的條件對分組後的數據進行篩選(與where相似,都是篩選,只不過having是用來篩選分組後的組)
    • 在where中不能使用聚合函數,必須使用having,having要位於group by以後
    • having的使用幾乎是與where同樣的,也能夠用in
    • select sClassId,count(sName) from student groupby sClassId having count(sName)>3
  • 類型轉換(CAST,CONVERT)
    • cast
      • select cast(salary asint)from teacher
    • convert
      • select convert(int,salary)from teacher
  • union,union all的使用
    • 是對兩個集合操做的,兩個集合必須具備相同的列數,列具備相同的數據類型(至少能隱式轉換的),最終輸出的集合的列名由第一個集合的列名來肯定(能夠用來鏈接多個結果)
    • 要union的兩個結果集的列數必須同樣
    • 要鏈接的兩個列的類型鼻血一直(或者類型兼容,好比varchar和nchar)
    • union默認去除告終果集中重複數據
    • 而union all 不會刪除重複的數據;(所以,union all 的效率要比union的效果高一些)
  • 一次插入多條數據
    • insertinto Score(studentId,english,math)
      select 1,80,100 union
      select 1,80,100 union
      select 3,50,59 union all
      select 4,66,89 union
      select 5,59,100
  • 字符串函數
    • LEN()
      • select len('字符串的長度') 
        • 結果是6
      • LEN返回的是去掉尾部空格後的字符數
    • Datalength()
      • select datalength('字符串的長度')
        • 結果是12
      • 返回的是包含尾部空格的字符串的字節數
    • LOWER()
      • select lower('JJJJJj')
      • 轉小寫
    • UPPER()
      • 轉大寫
    • LTRIM()
      • 去除左邊空格
    • RTRIM()
      • 去除右邊空格
    • LEFT()
      • 從左邊取指定長度字符串
    • RIGHT()
      • 從右邊取指定長度字符串
    • SUBSTRING(string,start , length) 
      • 從指定位置取指定長度字符串
  • ADO.NET主要類
    • Connection
      • 主要是開啓程序和數據庫之間的鏈接,沒有利用鏈接對象將數據庫打開,是沒法從數據庫中取得數據的
      • Close和Dispose的區別
        • Close之後還能夠Open,Dispose之後則不能再用
    • Command
      • 主要能夠用來對數據庫發出一些指令,例如能夠對數據庫下達查詢、新增、修改、刪除數據等指令,以及調用存在數據庫中的存儲過程等,這個對象是架構在Connection對象上,也就是Command對象是經過鏈接到數據源
    • DataAdapter
      • 主要是在數據源以及DataSet之間執行數據傳輸的工做,它能夠透過Command對象下達命令後,並將取得的數據放入DataSet對象中,這個對象是架構在Command對象上,並提供了許多配合DataSet使用的功能
    • DataSet
      • 這個對象能夠視爲一個暫存區(Cache),能夠把從數據庫中查詢到的數據保存起來,試着能夠將整個數據庫顯示出來,DataSet是放在內存中的,DataSet的能力不僅是能夠存儲多個Table而已,還能夠透過DataAdapter對象取得一些例如主鍵等的數據結構,並能夠記錄數據表間的關聯。DataSet對象能夠說是ADO.NET中重量級的對象,這個對象架構在DataAdapter對象上,自己不具備和數據源溝通的能力,也就是說咱們是將DataAdapter對象看成DataSet對象及數據源間傳輸數據的橋樑,DataSet包含諾幹DataTable,DataTable包含諾幹DataRow
    • DataReader
      • 當咱們只須要循序的讀取數據而不須要其它操做時,可使用 DataReader 對象。DataReader 對象只是一次一筆向下循序的讀取數據源中的數據,這些數據是存在數據庫服務器中的,而不是一次性加載到程序的內存中的,只能(經過遊標)讀取當前行的數據,並且這些數據是隻讀的,並不容許做其它的操做。由於 DataReader 在讀取數據的時候限制了每次只讀取一筆,並且只能只讀,因此使用起來不但節省資源並且效率很好。使用DataReader 對象除了效率較好以外,由於不用把數據所有傳回,故能夠下降網絡的負載。 ADO.NET 使用 Connection 對象來鏈接數據庫,使用 Command 或 DataAdapter 對象來執行SQL 語句,並將執行的結果返回給 DataReader 或 DataAdapter ,而後再使用取得的DataReader 或 DataAdapter 對象操做數據結果。
  • 數據庫鏈接字符串
    • server=.;database='dbName';uid=sa;pwd=123
  • SqlConnection類的State屬性
    • 是判斷數據庫鏈接狀態的一組枚舉值
  • SqlCommand類的方法:
    • ExecuteNonQuery()
      • 執行非查詢語句(增、刪、改),返回受影響函數
    • ExecuteScalar()
      • 返回查詢結果集的首行首列,是一個Object類型。
    • ExecuteReader()
      • 返回一個遊標指針,而後用read()方法一行一行的讀。性能很好。
  • StatementCompleted事件的觸發
    • 每條SQL語句執行完後會觸發
  • 得到剛剛插入數據庫的自增id
    • 方法一:string strSql="Insert into Student(name,age,cid) values ('{0}','{1}','{2}'); Select @@identity;"     
    • 方法二:string strSql="Insert into Student(name,age,cid) output inserted.id values('{0}','{1}','{2}') "
  • Sql注入攻擊(避免方式?)
    • 參數化查詢,SqlParameter
  • 如何使用迭代生成樹形菜單
    • void BuildTree(TreeNode node, List <Category > list) 

          //得到父元素的ID 
          int pId = Convert.ToInt32(node.Tag); 
          foreach (Category model in list) 
          { 
              //找出集合中 父ID 和傳入參數一致的
                if (model.TParentId == pId) 
              { 
                  //建立子節點
                   TreeNode sonNode = new TreeNode(model.TName); 
                  //將子節點本身的ID存入 節點的 TAG中 
                  sonNode.Tag = model.TId;
                    //將子節點 添加到父節點中
                   node.Nodes.Add(sonNode); 
                  //迭代 調用(看看子節點還有沒有子節點)
                   BuildTree(sonNode, list); 
              }
           }
       }
  • 單例模式(單例模式的建立)
    • 關閉要實現單例模式的類的構造函數(私有化構造函數)
    • 在類中添加一個私有的類的靜態變量
    • 在類中添加一個共有的方法,返回當前的靜態變量,在方法中判斷靜態變量是否爲null,若是爲null則先new在返回
    • public Person GetSingleInstance()   
       {   
           //在多線程狀況下,須要 加鎖    
          //這裏:第一,直接鎖當前的對象; 第二,定義一個線程 鎖的標識volatile,而後鎖住標識    
          lock(_mySinglePerson)     
          {    
              if(_mySinglePerson == null || _mySinglePerson.IsDisPosed)   
              {   
                 _mySinglePerson = new Person();  
              }  
          }   
           return _mySinglePerson;   
       }
  • DataTable的使用
    • DataTable dt = new DataTable();
      foreach(DataRow row in dt.Rows)
      {
      string str = row[ "columnName"].ToString();
              ....
      }
  • 類SqlDataAdapter的使用(重點)
    • Fill()方法
    • 注意:SqlDataAdapter的內部仍是使用了SqlDataRader去讀取數據,只不過讀取的過程微軟幫咱們封裝了
  • 類SqlCommandBuilder的使用(注意:他必須操做的是有主鍵的數據庫)
    • 往裏邊傳入一個DataAdapter對象,而後能夠用相應方法直接執行對錶的操做,使用至關簡單,功能也很強大,主要是微軟爲咱們作了一系列封裝,簡化了程序員的操做(但通常咱們都不使用這種方式對數據表進行操做)
    • //SQL命令生成助手(適配器) 
      SqlCommandBuilder scb = new SqlCommandBuilder(da);   
      //適配器在助手生成的SQL語句幫助下,成功的修改類數據庫    da.Update(ds,"tempTable");   
       MessageBox.Show( "修改爲功")
  •  
    提取查詢語句,封裝SqlHelper類(不只要會,並且要理解思想)
  • SQL中的Switch語句
    • 直接對列進行值的判斷
      • then的值必須是同一種類型(由於列的類型只能有一個)
      • select pId,
        case pTypeId
            when 1 then 'a'
            when 2 then 'b'
            else 'c'
            end,
            pName from PhoneNum
    • 通常用來爲列的取值範圍
      • case不必定非要和列在一塊兒判斷
      • select studentId,成績=(    
            case
                when english between 90 and 100 then 'A'
                when english between 80 and 89 then 'B'
                when english between 70 and 79 then 'C'
                when english between 60 and 69 then 'D'
                when english < 60 then 'E'
                else '缺考'
            end
        )
        from score
  • SQL中的子查詢
    • 在結果集的基礎上,再次查詢,必定要給結果集取別名,不然會報錯
    • select * from (select * from bc) as temp
  • SQL中的Exists用法
    • 先執行的是主查詢,而後再執行子查詢,將匹配行的數據顯示出來
      • select * from tbl where exists(select * from phonType where tbl.pid=phonType.pid)
    • 判斷結果集是否存在,但效率低
      • if exists(select * from tbl where ptId=1)
            select 1
        else
            select 2
  • SQL中的Any
    • Any至關於條件是不少個or
      • select * from Phone where pTypeID=any(select pType from b)
      • select * from Phone where pTypeID=1 or pTypeID=2
  • SQL中的All
    • All至關於條件是不少個and
      • select * from Phone where pTypeId=all(select pTypeId from b)
      • select * from Phone where pTypeId=1 and pTypeId=2
    • any、in、all匹配結果集時,結果集只能有一個列
  • SQL2008 微軟官方推薦分頁方式
    • select * from(
          select row_number() over(order by ar_id)as num,*from area
      )as t where runm between 10 and 14
  • SQL中表等值鏈接(內鏈接) inner join
    • 任何一方都必須知足鏈接條件,若是有一方不知足鏈接條件就不顯示
    • select * from Phone inner join PhoneType on n.pTypeId=t.ptId
  • SQL中表左鏈接(左外鏈接) left join
    • 保證左邊的數據都有,根據左邊數據匹配,顯示Join左邊表的全部記錄,右側表中符合條件的顯示,不符合條件的就顯示null
    • select * from Phone n left join PhoneType t on n.pTypeId=t.ptId
  • SQL中表右鏈接(右外鏈接) right join
    • 保證右邊的數據都有,根據右邊數據匹配
    • select * from PhoneNum n right join PhoneType t on n.pTypeId = t.ptId
  • SQL中表交叉鏈接(兩張表的乘積)
    • select * from student cross join Score
  • SQL中表全鏈接 full join
    • 左右兩邊的數據都進行匹配,至關於左鏈接和右鏈接相加和inner join恰好相反
    • select * from PhoneNum n full join PhoneType t on n.pTypeId = t.ptId
  • SQL中變量
    • 聲明變量
      • declare @age int 
    • 變量賦值
      • set @age=3
    • 聲明並賦值
      • select @age=3
    • 若是表數據出現多行,則將最後一行的列賦值給變量
      • select @age=age from Student
    • 輸出變量的值
      • print @age
  • SQL中的事務
    • begin transaction     開始事務
    • rollback transaction       回滾事務
    • commit transaction       提交事務
    • 銀行事務轉帳例子
      • declare @err int
        set @err = 0
        begintransaction
            begin
                print '開始事務'
                update bank set balance=balance-1000 where cid='0001'
                set @err=@err+@@ERROR
                update bank set balance=balance + 1000 where cid='0002'
                set @err=@err+@@ERROR
                if(@err>0)
                    begin
                        rollback transaction
                        print '回滾事務'
                    end
                else
                    begin
                        commit transaction
                        print '提交事務'
                    end
            end
  • 建立存儲過程
    • createprocedure usp_transferMoney
      @intPerson varchar(20)
      @outPerson varchar(20) '123' --能夠給默認值,當參數有默認值的時候,執行的時候能夠不傳該參數
      @abcPerson varchar(20)
      as
      select @intPerson,@outPerson,@abcPerson
  • 存儲過程帶輸出參數
    • --登錄成功返回用戶名不存在返回密碼錯誤返回登錄超過次返回試登錄次數超過次返回
      --drop proc login
      createprocLogin
          @result int output,
          @times int output,
          @name varchar(10),
          @pwd varchar(10)
      as
          select @times = uTimes from [user] where uName=@name
          if(@times>=3)
              begin
                  set @result = 4
                  return
              end
          if exists(select * from [user] where uName=@name)
              begin
                  if exists(select * from [user] where uName=@name and uPwd=@pwd)
                      begin
                          set @result = 1
                      end
                  else --密碼錯誤返回
                      begin
                          set @result = 3
                          update [user] set uTimes= uTimes+1 where uName=@name
                          select @times = uTimes from [user] where uName=@name
                      end
              end
          else --用戶名不存在返回
              begin
                  set @result = 2
              end
       
       
      insertinto [user] values('admin','000000',0)
      update [user] set uTimes=0
      select * from [user]
       
      declare @times int,@rint
      execLogin @routput,@timesoutput ,'admin111','admin'
      print 'times'+cast(@times asvarchar)
      print 'result'+ cast(@r asvarchar)
  • 調用存儲過程
    • 無參數的存儲過程調用
      • Exec usp_upGrade
    • 有參數的存儲過程兩種調用法
      • EXEC usp_upGrade2 60,55 ---按次序
      • EXEC usp_upGrade2 @english=55,@math=60 --參數名
    • 參數名參數有默認值時
      • EXEC usp_upGrade2 --都用默認值
      • EXEC usp_upGrade2 1 --第一個用默認值
      • EXEC usp_upGrade2 1,5 --不用默認值
  • 觸發器定義
    • 觸發器是一種特殊的存儲過程
    • 觸發器不能傳參,經過事件進行觸發執行
    • 針對tbL_abc表的新增以後的觸發器程序員

      • CreateTrigger triggerName on tbL_abc
        after
        insert
        as
        begin
            select * from inserted --保存了引起新增觸發器的新增數據,只能在觸發器中訪問

        end數據庫

  • 觸發器類型
    • after和for是在執行操做後觸發
    • instead of 是在操做以前觸發(替換觸發器),但不會執行原語句
  • 觸發器觸發條件
    • update
    • insert
    • delete
  • 什麼是索引
    • 就是爲某個表,某個列創建一個查找目錄,若是沒有目錄,漢語字典就要一頁一頁的翻,有了目錄直接翻目錄,快速定位到查找位置
  • 索引類型
    • 彙集索引(拼音目錄)
      • 數據的排列順序,按照彙集索引排列(控制表的物理順序)
      • 每一個表只能創建一個彙集索引
    • 非彙集索引(偏旁部首目錄)
      • 非彙集索引不會改變表的物理順序
      • 每一個表能夠創建多個非彙集索引
  • 什麼是填充因子
    • 就是爲每頁索引設置預留空間,在未來加入新索引的時候,就只須要更新當前索引頁,而不須要更新索引樹
    • 如每頁索引1M大小,當填充因子設置爲60%,在每頁只存放60%的數據,剩下40%留給未來要加入的索引項使用
  • 什麼是臨時表
    • 是存在緩存中,而不是寫在文件中
    • 能夠在系統數據庫→tempdb中找到
  • 什麼是局部臨時表
    • 生命週期在當前會話,當前會話結束就銷燬臨時表
    • 至關於C#的局部成員
    • 建立時表名前加一個#號
    • createtable #tempUsers
      (
          id int identity(1,1),
          name varchar(20)
      )
  • 什麼是全局臨時表
    • 多個用戶能夠共享這個全局臨時表
    • 當全部會話都退出的時候,這個全局臨時表纔會被銷燬
    • 至關與C#的static 靜態成員
    • 建立時,表名前面加兩個##號
    • createtable ##tempUsers
      (
          id int identity(1,1),
          name varchar(20)
      )
  • 什麼是三層結構
    • 一般意義的三層是將整個業務應用分爲
      • 表現層(UI)
      • 業務邏輯層(BLL)
      • 數據訪問層(DAL)
  • 三層結構的目的
    • 區分層次的目的即爲「高內聚,低耦合」的思想
  • 具體的三層是哪三層
    • 表現層(UI)
      • 通俗講就是展示給用戶的界面,即用戶在使用一個系統的時候的所見所得
    • 業務邏輯層(BLL)
      • 針對具體問題的操做,也能夠說是對數據層的操做,對數據業務邏輯處理
    • 數據訪問層(DAL)
      • 該層所作事務直接操做數據庫,針對數據的添加、刪除、修改、更新、查找等
  • 三層之間的關係
    • 是一種垂直的關係
    • 三層結構是N層結構的一種,通常來講,層次之間是向下依賴,下層代碼未肯定其接口前,上層代碼是沒法開發的,下次代碼接口的變化將使上層的代碼一塊兒變化
  • 三層結構的優缺點
    • 優勢
      • 分工明確,條理清晰,易於調試,並且具備可擴展性
    • 缺點
      • 增長成本
  • 郵件發送方法
    • //郵件發送方法
               public void Send() {
                   //建立郵件對象
                  MailMessage mailMessage = new MailMessage();
                   //設置郵件字符集編碼
                  mailMessage.SubjectEncoding = Encoding.Default;
                  mailMessage.BodyEncoding = Encoding.Default;
                  mailMessage.HeadersEncoding = Encoding.Default;
                   //設置郵件發件人
                  mailMessage.From = new MailAddress( abc@cilence.com);
                   //設置郵件收件人
                  mailMessage.To.Add( new MailAddress( cilence6788@cilence.com));
                   //設置郵件主題
                  mailMessage.Subject = "主題";
                   //設置郵件正文
                  mailMessage.Body = "你好呀!";
                   //建立SMTP客戶端
                   //SMTP服務端地址
                  SmtpClient smtpClient = new SmtpClient( "127.0.0.1");
                   //SMTP客戶端 通訊憑證
                  smtpClient.Credentials = new NetworkCredential( "abc@cilence.com", "123");
                   //發送
                  smtpClient.Send(mailMessage);
              }
  • Excel導入導出
    • OLE Automation(須要安裝Excel。要啓動excel進程,不適合服務器)Microsoft Jet OleDb
      Open XML
      NPOI(不依賴Excel客戶端,省資源,但只能處理.xls格式)
    • ExecelHelper 類幫助說明
      • 1.將對象集合導出到Excel + void ObjectCollectionsToExcel<T>(List<T> objectCollections, string path)選要建立實體類對象集合,選中一個路徑,導出便可
      • 2.將Excel數據導入爲對象集合 +List<T> ExcelToObjectCollections<T>(string path)將Excel文檔導入爲ObjectCollection對象集合,是採用反射方式,去調用實體類 構造函數 ,如下爲實體類寫法
      • 重點在public Person(IRow row)構造函數
      • using NPOI.SS.UserModel;
        namespace MyLibrary.Test
        public class Person
        {
                 public Person(IRow row) {
                     this.A = row.GetCell( 0).ToString();
                     this.B = row.GetCell( 0).ToString();
                     this.C = row.GetCell( 0).ToString();
                }

                 public string A { get; set; }
                 public string B { get; set; }
                 public string C { get; set; }
        }
  • MD5加密解密方法
    • System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strPwd,"MD5");
    • /// <summary> 
      /// 加密方法 
      /// </summary> 
      /// <param name="encryptString">要加密的字符串</param> 
      /// <returns>加密後的字符串</returns>
        public static string EncryptString( string encryptString) 
       { 
           TripleDESEncryptor target = new TripleDESEncryptor( "nihao");
            return target.Encrypt(encryptString); 
       }

      /// <summary> 
      /// 解密方法 
      /// </summary> 
      /// <param name="deEncryptString">要解密的字符串</param> 
      /// <returns>解密後的字符串</returns>
        public static string DeEncryptString( string deEncryptString) 
       { 
           TripleDESEncryptor target = new TripleDESEncryptor( "nihao"); 
           return target.Decrypt(deEncryptString); 
       }

        public static string GetMd5( string txt) 
       { 
           MD5Encryptor target = new MD5Encryptor(); // TODO: 初始化爲適當的值 
           return target.GetMD5(txt); 
       }
  • 讀取數據庫後,判斷dataset裏列的值是否爲空
    • If(dataset.Table[ 0][ "columnName"] != null)
      {
      .......
      }
    • if (dr.IsNull( "")) 
      {
      }
  • 項目術語
    • CRM--客戶關係管理系統(Customer Relation Management
    • OA--辦公自動化 (Office Automation
    • MIS--信息管理系統(Management Information Systems
    • ERP--企業資源計劃系統(Enterprise Resource Planning
相關文章
相關標籤/搜索