SQL Server的C#串連及對象存在判斷

來源:互聯網
上載者:User

SQL Server的C#串連及對象存在判斷

關於C#串連資料庫的介紹,這篇文章總結的比較全面。

對於C#串連MS SQL Server,主要使用sqlconnection。認證方式主要採用windows整合認證方式或者SQL Server認證模式。串連語句主要如下所示:

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";

說明:

參考:

1) server與data source: 經過實驗兩者效果差不多,任取其一即可。可以用主機名稱字或者當前機子“.”代替。不過一般我們安裝的都是類似於hostname\SQLEXPRESS的資料來源或者主機,所以這裡需要寫成"server=.\SQLEXPRESS;"或者“data source=hostname\SQLEXPRESS"之類的形式。

2) database與initial catalog:兩者效果似乎也差不多。主要用來指定資料庫

3) integrated security: 可以取值為true、false、yes、no或者SSPI。SSPI表示Security Support Provider Interface,效果相當於true。當設定為true時候將採用windows認證,這時候指定的使用者名稱密碼將無效。當沒有指定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操作時候,如果需要自動化的指令碼運行時候,往往運行第二次第三次時候,可能第一次啟動並執行有些操作就不需要了。或者我們可能要根據資料庫的狀態決定後面需要什麼操作,這時候判斷資料庫中的一些對象存在與否就很重要了。比如想知道一個資料庫是否存在,想建立一個表卻不知道它是不是已經有了呢,而又想避免誤操作帶來的錯誤,判斷它們存在就很有用了。

下面列出了一些判斷對象存在的語句,很有參考意義。

1 判斷資料庫是否存在
if exists (select * from sys.databases where name = ’資料庫名’) 
  drop database [資料庫名]
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 判斷函數是否存在
--  判斷要建立的函數名是否存在   
  if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[函數名]’) and xtype in (N’FN’, N’IF’, N’TF’))   
  drop function [dbo].[函數名]
7 擷取使用者建立的對象資訊
SELECT [name],[id],crdate FROM sysobjects where xtype=’U’ 
/* 
xtype 的表示參數類型,通常包括如下這些 
C = CHECK 條件約束 
D = 預設值或 DEFAULT 約束 
F = FOREIGN KEY 約束 
L = 日誌 
FN = 純量涵式 
IF = 內嵌表函數 
P = 預存程序 
PK = PRIMARY KEY 約束(類型是 K) 
RF = 複製篩選預存程序 
S = 系統資料表 
TF = 表函數 
TR = 觸發器 
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 查看資料庫中對象
SELECT * FROM sys.sysobjects WHERE name=’對象名’

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.