SQL Server的C#连接及对象存在判断

C#连接SQL Server

关于C#连接数据库的介绍,这篇文章总结的比较全面。http://blog.csdn.net/candy1232009/article/details/7654927

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

说明:

参考:http://blog.csdn.net/wyaspnet/article/details/5627334

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操作时候,如果需要自动化的脚本运行时候,往往运行第二次第三次时候,可能第一次运行的有些操作就不需要了。或者我们可能要根据数据库的状态决定后面需要什么操作,这时候判断数据库中的一些对象存在与否就很重要了。比如想知道一个数据库是否存在,想创建一个表却不知道它是不是已经有了呢,而又想避免误操作带来的错误,判断它们存在就很有用了。

这个网址列出了一些判断对象存在的语句,很有参考意义。(http://www.cnblogs.com/slcc/archive/2012/04/13/2445308.html)

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=’对象名’ 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。