關(guān)于C#連接數(shù)據(jù)庫的介紹,這篇文章總結(jié)的比較全面。http://www./Linux/2015-02/114084.htm
對于C#連接MS SQL Server,主要使用sqlconnection。認(rèn)證方式主要采用windows集成認(rèn)證方式或者SQL Server認(rèn)證模式。連接語句主要如下所示:
string constr = "server=.;database=myschool;integrated security=SSPI";
string constr = "server=.;database=myschool;uid=sa;pwd=sa";
string constr = "data source=.;initial catalog=myschool;uid=sa;pwd=sa";
說明:
參考:http://www./Linux/2015-02/114085.htm
1) server與data source: 經(jīng)過實驗兩者效果差不多,任取其一即可??梢杂弥鳈C名字或者當(dāng)前機子“.”代替。不過一般我們安裝的都是類似于hostname\SQLEXPRESS的數(shù)據(jù)源或者主機,所以這里需要寫成"server=.\SQLEXPRESS;"或者“data source=hostname\SQLEXPRESS"之類的形式。
2) database與initial catalog:兩者效果似乎也差不多。主要用來指定數(shù)據(jù)庫
3) integrated security: 可以取值為true、false、yes、no或者SSPI。SSPI表示Security Support Provider Interface,效果相當(dāng)于true。當(dāng)設(shè)置為true時候?qū)⒉捎脀indows認(rèn)證,這時候指定的用戶名密碼將無效。當(dāng)沒有指定integrated security值或者值為false的時候,需要指定用戶名和密碼,使用SQL Server方式登錄。
例子:
//String conStr = @"Data Source=TAN\SQLEXPRESS;Initial Catalog=tan;Integrated Security=SSPI"; //String conStr = @"Data Source=TAN\SQLEXPRESS;Initial Catalog=tan;Integrated Security=false;uid=sa;pwd=123"; String conStr = @"server=.\SQLEXPRESS;database=tan;uid=sa;pwd=123"; SqlConnection con = new SqlConnection(conStr); String sql = @"IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'Persons') AND OBJECTPROPERTY(id,N'iSUSErTable') = 1) CREATE TABLE Persons (Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))"; try { SqlCommand com = new SqlCommand(sql, con); con.Open(); Console.WriteLine("Connect Sucess!"); com.ExecuteNonQuery(); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { con.Close(); } Console.ReadKey();
SQL Server判斷對象存在
我們在做sql操作時候,如果需要自動化的腳本運行時候,往往運行第二次第三次時候,可能第一次運行的有些操作就不需要了。或者我們可能要根據(jù)數(shù)據(jù)庫的狀態(tài)決定后面需要什么操作,這時候判斷數(shù)據(jù)庫中的一些對象存在與否就很重要了。比如想知道一個數(shù)據(jù)庫是否存在,想創(chuàng)建一個表卻不知道它是不是已經(jīng)有了呢,而又想避免誤操作帶來的錯誤,判斷它們存在就很有用了。
下面列出了一些判斷對象存在的語句,很有參考意義。
1 判斷數(shù)據(jù)庫是否存在 if exists (select * from sys.databases where name = ’數(shù)據(jù)庫名’) drop database [數(shù)據(jù)庫名] 2 判斷表是否存在 if exists (select * from sysobjects where id = object_id(N’[表名]’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1) drop table [表名] 3 判斷存儲過程是否存在 if exists (select * from sysobjects where id = object_id(N’[存儲過程名]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1) drop procedure [存儲過程名] 4 判斷臨時表是否存在 if object_id(’tempdb..#臨時表名’) is not null drop table #臨時表名 5 判斷視圖是否存在 --SQL Server 2000 IF EXISTS (SELECT * FROM sysviews WHERE object_id = ’[dbo].[視圖名]’ --SQL Server 2005 IF EXISTS (SELECT * FROM sys.views WHERE object_id = ’[dbo].[視圖名]’ 6 判斷函數(shù)是否存在 -- 判斷要創(chuàng)建的函數(shù)名是否存在 if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[函數(shù)名]’) and xtype in (N’FN’, N’IF’, N’TF’)) drop function [dbo].[函數(shù)名] 7 獲取用戶創(chuàng)建的對象信息 SELECT [name],[id],crdate FROM sysobjects where xtype=’U’ /* xtype 的表示參數(shù)類型,通常包括如下這些 C = CHECK 約束 D = 默認(rèn)值或 DEFAULT 約束 F = FOREIGN KEY 約束 L = 日志 FN = 標(biāo)量函數(shù) IF = 內(nèi)嵌表函數(shù) P = 存儲過程 PK = PRIMARY KEY 約束(類型是 K) RF = 復(fù)制篩選存儲過程 S = 系統(tǒng)表 TF = 表函數(shù) TR = 觸發(fā)器 U = 用戶表 UQ = UNIQUE 約束(類型是 K) V = 視圖 X = 擴展存儲過程 */ 8 判斷列是否存在 if exists(select * from syscolumns where id=object_id(’表名’) and name=’列名’) alter table 表名 drop column 列名 9 判斷列是否自增列 if columnproperty(object_id(’table’),’col’,’IsIdentity’)=1 print ’自增列’ else print ’不是自增列’ SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(’表名’) AND is_identity=1 10 判斷表中是否存在索引 if exists(select * from sysindexes where id=object_id(’表名’) and name=’索引名’) print ’存在’ else print ’不存在 11 查看數(shù)據(jù)庫中對象 SELECT * FROM sys.sysobjects WHERE name=’對象名’
本文永久更新鏈接地址:http://www./Linux/2015-02/114086.htm
|