上個部落格對三層的**有了巨集觀的把控,接下來對d層(資料訪問層)的**進行剖析
**:
public login.model.userinfo selectuser(string username, string password)
user.id = reader.getint32(0);//將資料庫第零列的資料以int32的格式返回
user.username = reader.getstring(1);//第一列
user.password = reader.getstring(2);//第二列
if (!reader.isdbnull (3))
}return user;//返回乙個user物件
}
}
對於第一行**
using (sqlconnection conn = new sqlconnection(dbutil.connstring))
using的作用:用於自動釋放資料庫連線,因為在使用sqldatareaer這個類的時候會與資料庫建立長連線,消耗資料庫的連線數
下面**涉及到sqlparameter類的用法:
cmd.commandtext = @"select id,username,password,email from users where
username = @username and password=@password";
先看@的作用:
在寫資料庫語句的時候,在使用資料或者資料時會加入@,會在一定程度上防止sql注入,所謂的sql注入只需要在賦值時改變值即可不需要密碼進入資料庫竊取資料,如下面的例子:
加入@的方法便為引數化sql,在使用引數化查詢的情況下,資料庫伺服器不會將引數的內容視為sql指令的一部份來處理,而是在資料庫完成 sql 指令的編譯後,才套用引數執行,因此就算引數中含有惡意的指令,由於已經編譯完成,就不會被資料庫所執行,因此,可從一定程度上避免sql注入。詳見部落格:
回過頭來看第一行的**@username便達到了這個效果,使用
cmd.parameters.add("@username",username);
即可完成將使用者的值賦予資料庫中的字段
在剛才的@的作用(引數化sql)中只是在一定程度上避免sql注入,如何在進一步實現呢,這就用到sqlparameter類
cmd.parameters.add(new sqlparameter("@username",username));
cmd.parameters.add(new sqlparameter("@password",password));
這個時候可以解決sql注入了詳見部落格:
接著看下面的**涉及到sqlcommand類及sqldatareader類
sqldatareader reader = cmd.executereader();
user.id = reader.getint32(0);//將資料庫第零列的資料以int32的格式返回
user.username = reader.getstring(1);//第一列
user.password = reader.getstring(2);//第二列
第一行**將查詢的結果賦予reader,reder.read方法一行行讀取資料,第二行**通過reader.getint32得到資料返回model層賦予user.id,這就實現資料庫的資料與model類中資料的一致性 三層 資料庫為什麼打不開?
最近在敲三層的例子,到了要建資料庫的時候突然打不開,想起來,還是先要啟動sql server 服務中的一些配置,但是在找到sql server 服務的時候顯示的卻是這樣的結果。第一種辦法就是 開啟控制面板,找到解除安裝程式,把 microsoft sql server 2013 2012 expre...
資料庫 三層架構
資料層 dal 業務邏輯層 bll 表示層 ui 三層結構原理 3個層次中,系統主要功能和業務邏輯都在業務邏輯層進行處理。所謂三層體系結構,是在客戶端與資料庫之間加入了乙個 中間層 也叫元件層。這裡所說的三層體系,不是指物理上的三層,不是簡單地放置三颱機器就是三層體系結構,也不僅僅有b s應用才是三...
三層 C 語句操作SQLServer資料庫
1.概述 首先是為我們的程式新增必要的引用以及一些資料成員。因為我們的程式設計到資料庫的訪問操作,所以必須要運用到資料提供者 data provider 的物件。在.net框架下,我們主要運用的資料提供者分兩類,一類是sql型別的,另一類是oledb型別的。他們涉及的命名空間是system.data...