northwind和pubs是示例數(shù)據(jù)庫(kù),我們可以利用它們做演示。
目前創(chuàng)新互聯(lián)建站已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、咸寧網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
因?yàn)槠渌鼛讉€(gè)是系統(tǒng)數(shù)據(jù)庫(kù),不可以隨便更改,聯(lián)機(jī)幫助上的例子基本上都以northwind和pubs這兩個(gè)數(shù)據(jù)來(lái)舉例。
步驟/方法
1
在我們c#與sql鏈接的過(guò)程中,一般會(huì)有兩種方法,而每種方法均賦予了不同的權(quán)限;如下:
1、集成的Windows身份驗(yàn)證語(yǔ)法范例:
String connectionString = "server=localhost;database=Northwind;integrated security=SSPI";
代碼說(shuō)明:其中server表示運(yùn)行Sql Server的計(jì)算機(jī)名,由于在本書中,ASP.NET程序和數(shù)據(jù)庫(kù)系統(tǒng)是位于同一臺(tái)計(jì)算機(jī)的,所以我們可以用localhost取代當(dāng)前的計(jì)算機(jī)名,當(dāng)然localhost也可以用“.”來(lái)代替。database表示所使用的數(shù)據(jù)庫(kù)名,這里設(shè)置為Sql Server自帶的一個(gè)示例數(shù)據(jù)庫(kù)--Northwind。由于我們希望采用集成的Windows驗(yàn)證方式,所以設(shè)置 integrated security為SSPI即可。
注意:在使用集成的Windows驗(yàn)證方式時(shí),并不需要我們輸入用戶名和口令,而是把登錄Windows時(shí)輸入的用戶名和口令傳遞到Sql Server。然后Sql Server檢查用戶清單,檢查其是否具有訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限。而且數(shù)據(jù)庫(kù)連接字符串是不區(qū)分大小寫的。
2
2、采用Sql Server身份驗(yàn)證的語(yǔ)法范例:
string connectionString = "server=localhost;database=Northwind;uid=sa;pwd=sa";
代碼說(shuō)明:在上述語(yǔ)法范例的程序代碼中,采用了使用已知的用戶名和密碼驗(yàn)證進(jìn)行數(shù)據(jù)庫(kù)的登錄。localhost可以用“.”來(lái)代替,uid為指定的數(shù)據(jù)庫(kù)用戶名,pwd為指定的用戶口令。為了安全起見,一般不要在代碼中包括用戶名和口令,你可以采用前面的集成的Windows驗(yàn)證方式或者對(duì)Web.Config文件中的連接字符串加密的方式提高程序的安全性。
END
注意事項(xiàng)
在我們運(yùn)用以上兩種方法中的任何一種的時(shí)候,我們一定要注意以下幾點(diǎn):
1、細(xì)心:我們?cè)诰帉戞溄幼址臅r(shí)候,一定要認(rèn)真加仔細(xì),因?yàn)閏#是區(qū)分字母的大小寫的,同時(shí)在某種情況下,還對(duì)空格敏感;在筆者還是菜鳥的時(shí)候,就因?yàn)橐粋€(gè)空格的問(wèn)題,使本人糾纏了2天而郁悶萬(wàn)分,最后一查,竟然是一個(gè)空格惹的禍;
2、權(quán)限:這里,就是要大家注意的是,我們鏈接數(shù)據(jù)庫(kù)的權(quán)限一定要獲取正確,如果權(quán)限不正確,那再認(rèn)真和仔細(xì),也是枉然;
3、網(wǎng)速:在我們開發(fā)的c#程序中,也偶爾會(huì)出現(xiàn)因?yàn)榫W(wǎng)速巨慢引起的sql鏈接故障的問(wèn)題,那么我們?cè)跈z查以上2種都無(wú)誤的情況下,去測(cè)試一下你的網(wǎng)速是否出現(xiàn)異常,由此來(lái)判斷一下你的數(shù)據(jù)庫(kù)鏈接是否真正有誤;這,是否是c#中的一個(gè)小bug呢?歡迎大家討論!
其實(shí)啊,這本來(lái)是一個(gè)很easy的問(wèn)題,就像我的引言中所說(shuō)那樣,不是很復(fù)雜,只要我們方法正確,足夠仔細(xì),就不會(huì)出現(xiàn)什么問(wèn)題;
連接數(shù)據(jù)庫(kù)
public class DBManager {
//定義數(shù)據(jù)庫(kù)連接的URL
private static final String URL="jdbc:sqlserver://localhost:1433;database=j1105";
//定義數(shù)據(jù)庫(kù)的用戶名
private static final String USERNAME = "sa";
//定義數(shù)據(jù)庫(kù)密碼
private static final String PASSWORD = "sa";
//定義一個(gè)連接的引用,使用單例模式
private static Connection conn = null;
//使用靜態(tài)塊來(lái)注冊(cè)驅(qū)動(dòng)
//類加載時(shí)自動(dòng)執(zhí)行代碼塊
static {
//反射com.microsoft.sqlserver.jdbc.SQLServerDriver.class
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//獲得連接
//在程序使用過(guò)程中始終只有1個(gè)對(duì)象存在
//使用單例模式來(lái)給Connection賦值
public static Connection getConnection(){
if(conn == null){
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
/**
* 關(guān)閉的一些操作 , 優(yōu)化
* @param conn
* @param stat
* @param rs
*/
public static void close(Connection conn,Statement stat,ResultSet rs){
try{
if(conn != null){
conn.close();
}
if(stat != null){
stat.close();
}
if(rs != null){
rs.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}
/**
* 重寫上面的方法,在只有2個(gè)參數(shù)的情況下關(guān)閉
* @param conn
* @param stat
*/
public static void close(Connection conn,Statement stat){
try{
if(conn != null){
conn.close();
}
if(stat != null){
stat.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}
public static void main(String[] args){
Connection conn = DBManager .getConnection();
System.out.println(conn);
}
}
接口
public interface IStudentDao {
public void deleteStudent(int xh);
}
實(shí)現(xiàn)
public class StudentDAOimpl implements IStudentDao {
public void deleteStudent(int xh) {
try{
String sql = "delete from tb_student where xh = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, xh);
ps.executeUpdate();
System.out.println("成功刪除");
}catch(SQLException e){
e.printStackTrace();
}
}
}
select?id,?ISNULL(cast(Score?as?varchar),'空白')?from?T
select?id,?ISNULL(Score,'')?from?T
你看你到底是哪個(gè)意思