【测速】C#连接SQL Server数据库实例及判断对象是否存在

更新时间:2019-10-07    来源:php与数据库    手机版     字体:

【www.bbyears.com--php与数据库】

C#连接SQL Server数据库


对于不同的.NET数据提供者,ADO.NET采用不同的Connection对象连接数据库。这些Connection对象为我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。

Connection类有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection。

SqlConnection类的对象连接SQL Server数据库;OracleConnection 类的对象连接Oracle数据库;OleDbConnection类的对象连接支持OLE DB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库。与数据库的所有通讯最终都是通过Connection对象来完成的。
 (1)用SqlConnection连接SQL Server

加入命名空间:using System.Data.SqlClient;

连接数据库: string conString = "data source=IP地址; Database=数据库名;user id=用户名; password=密码";

                          SqlConnection myconnection = new SqlConnection(conString);

                          myconnection.open();

(2)用OracleConnection连接Oracle

加入命名空间:using System.Data.OracleClient;

连接数据库: string conString = "data source=IP地址; Database=数据库名;user id=用户名; password=密码";

                          OracleConnection myconnection = new OracleConnection(conString);

                          myconnection.open();

(3)用 MySqlConnection连接MySQL

在.NET中连接MySQL数据库有两种方法:MySQL Connector/ODBC 和 MySQL Connector/NET,ODBC连接器是符合ODBC标准的交互平台,是.NET访问MySQL数据库最好的选择。

首先,需要下载安装MySql-connector-net-5.1.5.Data.msi这个组件。如果是默认安装,则可以在C:\Program Files\MySQL\MySQL Connector Net 5.1.5\Binaries\.NET2.0中找到MySql.Data.dll,将该文件复制到项目的bin目录下。并且在项目中添加引用MySql.Data.dll。实现代码如下:

加入命名空间:using MySql.Data.MySqlClient;

连接数据库: string conString = "server=IP地址; Database=数据库名;user id=用户名; password=密码";

                          MySqlConnection myconnection = new MySqlConnection(conString);

                          myconnection.open();

(4)用OleDbConnection连接各种数据源

由于数据源不同,相应的连接字符串也会不同。

加入命名空间:using System.Data.OleDb;

连接 SQL Server:  string conString = "Provider=SQLOLEDB.1; Persist Security Info=False; user id=用户名; Database=数据库名; data source=COMPUTER; ";

                                    OleDbConnection myconnection = new OleDbConnection(conString);

                                    myconnection.open();

连接 Access:  string conString = "Provider=Microsoft.Jet.OLEDB.4.0;  data source=C:\\Database1.mdb; Persist Security Info=False;";

                                    OleDbConnection myconnection = new OleDbConnection(conString);

                                    myconnection.open();

(也可以通过建立.udl文件来获得字符串)

连接 Oracle:  string conString = "Provider=MSDAORA;  user id=用户名; password=密码; data source=db; Persist Security Info=False;";

                                    OleDbConnection myconnection = new OleDbConnection(conString);

                                    myconnection.open();

(也可以通过OracleConnection连接)

注意:使用不同的Connection对象需要导入不同的命名空间。OleDbConnection的命名空间为System.Data.OleDb。SqlConnection的命名空间为System.Data.SqlClient。OracleConnection的命名空间为System.Data.OracleClinet。

我们就可以使用如下两种方式连接数据库,即采用集成的Windows验证和使用Sql Server身份验证进行数据库的登录。

1、集成的Windows身份验证语法范例

string constr = "server=.;database=myschool;integrated security=SSPI";

说明:程序代码中,设置了一个针对Sql Server数据库的连接字符串。其中server表示运行Sql Server的计算机名,由于程序和数据库系统是位于同一台计算机的,所以我们可以用.(或localhost)取代当前的计算机名。database表示所使用的数据库名(myschool)。由于我们希望采用集成的Windows验证方式,所以设置 integrated security为SSPI即可。

2、Sql Server 2005中的Windows身份验证模式如下:

string constr = "server=.;database=myschool;uid=sa;pwd=sa";

说明:程序代码中,采用了使用已知的用户名和密码验证进行数据库的登录。数据库连接字符串是不区分大小写的。uid为指定的数据库用户名,pwd为指定的用户口令。为了安全起见,一般不要在代码中包括用户名和口令,你可以采用前面的集成的Windows验证方式或者对Web.Config文件中的连接字符串加密的方式提高程序的安全性。

3、Sql Server 2005中的Sql Server身份验证模式如下:

string constr = "data source=.;initial catalog=myschool;user id=sa;pwd=sa";

说明:程序代码中data source 表示运行数据库对应的计算机名,initial catalog表示所使用的数据库名。uid为指定的数据库用户名,pwd为指定的用户口令。

4、Access数据库的连接字符串的形式如下:

string connectionString =@"provider=Microsoft.Jet.OLEDB.4.0;data source=c:\DataSource\myschool.mdb";

说明:程序代码中,通过专门针对Access数据库的OLE DB提供程序,实现数据库的连接。这使用的的OLE DB提供程序为Microsoft.Jet.OLEDB.4.0,并且数据库存放在c:\DataSource目录下,其数据库文件为myschool.mdb。      

            string constr = "server=.;database=myschool;integrated security=SSPI";
            //string constr = "server=.;database=myschool;uid=sa;pwd=sa";
            //string constr = "data source=.;initial catalog=myschool;user id=sa;pwd=sa";
            SqlConnection con = new SqlConnection(constr);
          // con.ConnectionString = constr;
            string sql = "select count(*) from grade";
            SqlCommand com = new SqlCommand(sql,con);
            try
            {
                con.Open();
                MessageBox.Show("成功连接数据库");
                int x = (int)com.ExecuteScalar();
                MessageBox.Show(string.Format("成功读取{0},条记录", x));
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                con.Close();
                MessageBox.Show("成功关闭数据库连接", "提示信息", MessageBoxButtons.YesNoCancel);
            }

5、Web.config 配置

在ASP.NET 2.0中,使用了一种在运行时解析为连接字符串值的新的声明性表达式语法,按名称引用数据库连接字符串。连接字符串本身存储在 Web.config 文件中的 <connectionStrings>配置节下面,以便易于在单个位置为应用程序中的所有页进行维护。











我们也可以用下面的方式从配置文件直接读取数据库连接字符串。首先我们需要引用using System.Web.Configuration命名空间,该命名空间包含用于设置 ASP.NET 配置的类。string connectionString =ConfigurationManager.ConnectionStrings["myschool"].ConnectionString;

首先你应该区分Windows验证与Sql自身的验证的区别。
  Windows验证就是SqlServer服务器使用Windows自带的验证系统,如果你指定SqlServer内Windows的一个组有访问的权限,那么加入此组的Windows用户都有访问数据库的权限。此验证有个缺点,就是如果不是在域模式下,无法加入远程计算机的用户,所以如果使用C/S方式写程序的话,使用Windows验证无法使本地计算机的Windows帐户访问远程数据库服务器。
 
  Sql验证就简单多了,就是使用sqlserver的企业管理器中自己定义由Sql控制的用户,指定用户权限等。这个帐户信息是由SqlServer自己维护的,所以SqlServer更换计算机后信息不会丢失,不用重新设定。
 
  所以如果你的项目使用在一个比较大的网络中,而且对安全要求比较高,那么应该建立域,使用Windows验证,而且要与系统管理员配合详细设定可以访问SqlServer的Windows帐户。如果使用一个小网络,而且此网络仅用来使用项目,对安全没有高要求,那么使用SqlServer验证,而且更新??升级等都方便。
  
Windows验证与SQL Server验证的数据库联接字符串是不同的。


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




关于SQL连接语句中的Integrated Security=SSPI/ture/false

解决方法:

即:Security Support Provider Interface

设置Integrated Security为 True 的时候,连接语句前面的 UserID, PW 是不起作用的,即采用windows身份验证模式。

只有设置为 False 或省略该项的时候,才按照 UserID, PW 来连接。

Integrated Security 可以设置为: True, false, yes, no ,这四个的意思很明白了,还可以设置为:sspi ,相当于 True,建议用这个代替 True。

initial catalog与database的区别是什么

Initial Catalog:

DataBase:

两者没有任何区别只是名称不一样,就好像是人类的真实姓名与曾用名一样。。都可以叫你。

********************************************

Integrated Security=SSPI 这个表示以当前WINDOWS系统用户身去登录SQL SERVER服务器,如果SQL SERVER服务器不支持这种方式登录时,就会出错。

你可以使用SQL SERVER的用户名和密码进行登录,如:

"Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=数据库名;Data Source=192.168.0.1;User ID=sa;Password=密码"

***************************************************

Integrated Security - 或 - Trusted_Connection "false" 当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。 可识别的值为 true、false、yes、no 以及与 true 等效的 sspi(强烈推荐)。

*************************************************

ADO.net 中数据库连接方式

System.Data.SqlClient.SqlConnection

常用的一些连接字符串(C#代码):

SqlConnection conn = new SqlConnection( “Server=(local);Integrated Security=SSPI;database=Pubs“);

SqlConnection conn = new SqlConnection(“server=(local)\NetSDK;database=pubs;Integrated Security=SSPI“);

SqlConnection conn = new SqlConnection(“Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;“);

SqlConnection conn = new SqlConnection(“ data source=(local);initial catalog=xr;integrated security=SSPI;

persist security info=False;workstation id=XURUI;packet size=4096; “);

SqlConnection myConn = new System.Data.SqlClient.SqlConnection(“Persist Security Info=False;Integrated

Security=SSPI;database=northwind;server=mySQLServer“);

SqlConnection conn = new SqlConnection( “ uid=sa;pwd=passwords;initial catalog=pubs;data source=127.0.0.1;Connect Timeout=900“);

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

如果你的机器装了sql2000 那Data Source=.肯定是不行的了

因为实例名2000和2005的默认的是一样的 所以2005的实例肯定不能用Data Source=.表示

查看sql2005的实例名 将Data Source=.\SQLEXPRESS 中的 SQLEXPRESS用你的新实例名替换掉。

 

C#连接SQL Server数据库实例及判断对象是否存在

 

我装的是SQL Server 2005 EXPRESS 即VS2008自带的数据库,所以将Data Source写为:

Data Source=.\SQLEXPRESS即可.SQL2000之前用的.号不能在2005上使用.

今天还遇到一个问题,就是SQL 2005 EXPRESS 启用SA账号的问题.搞了半天不能用,尽管已经将SA启用,但是依然登陆不上,后来,将身份验证设置为SQL+Windows验证模式,才能在SQL Server Management Studio Express上登录.

VS2008其实已经自带了数据库,以及数据库驱动了,平时的开发调试完全可以用这个玩.只是没有数据库管理工具,所以无法建表,其实微软提供了免费的管理工具:

安装微软的SQL Server Management Studio Express就可以操作数据库了.

下载

启用SA方法如下,开启MSE,用windows验证登陆,

 

C#连接SQL Server数据库实例及判断对象是否存在

 

 

C#连接SQL Server数据库实例及判断对象是否存在

 

 

C#连接SQL Server数据库实例及判断对象是否存在

 

这样就能用SA来登录啦,当然可以自己修改密码.

数据库一打开,.NET能够连上数据库,进行正常的数据存取,那么之后的开发就容易多啦.


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

 

本文来源:http://www.bbyears.com/jiaocheng/71844.html