首页 > 代码库 > C#连接SqlServer数据库(ADO.NET)

C#连接SqlServer数据库(ADO.NET)

ADO.NET

向.NET程序员公开数据访问服务的类,用于对Microsoft SQL Server和XML 等数据源进行访问,还提供对OLE DB和XML公开的数据源提供一致访问的方法。

两种访问数据的模型:无连接模型(脱机)连接模型(联机)

无连接将数据下载到客户机上,并在客户机上将数据封装到内存中,然后可以像访问本地关系数据库一样访问内存中的数据(如DataSet)。

连接模型则依赖于逐记录的访问,这种访问要求打开并保持数据源的连接。

联机时使用Connection、Command、DataAdapter

脱机时使用Connection、Command、DataAdapter、Dataset

 

ADO.NET的核心对象

 

·Connection(连接),用来建立与特定数据源的连接

 

·Command(命令),用来对数据源执行SQL命令语句或存储过程

 

·DataReader(数据阅读器),用来从数据源中获取只读、向前的数据流

 

·DataAdapter(数据适配器),用来在数据源和数据集之间交换数据

 

·DataSet(数据集),用来处理从数据源读出的数据,表示数据在内存中的缓存

 

 

 

 

使用Connection对象连接数据库

 

主要成员:

 

·ConnectionString属性   连接字符串,用于获取或设置连接到数据库的信息

 

·Open()方法    使用ConnectionString所指定的属性设置来打开数据库连接

 

·Close()方法    关闭数据库的连接

 

·StateChange事件  当连接状态更改时触发该事件

 

Connection对象的使用步骤:

 

⑴·引入ADO.NET命名空间

 

⑵·创建Connection对象,并设置其ConnectionString属性

 

⑶·打开与数据库的连接

 

⑷·对数据库进行读写操作

 

⑸·关闭与数据库的连接

 

·⑴引入ADO.NET命名空间

 

SQL Server数据提供程序  System.Data.SqlClient

 

ODBC数据提供程序      System.Data.Odbc

 

OLE DB数据提供程序      System.Data.OleDb

 

Oracle数据提供程序      System.Data.OracleClient

 

⑵·创建Connection对象,并设置其ConnectionString属性

 

如果使用SQL Server身份验证,则连接字符串通常为:

 

Data Source=服务器名;Initial Catalog=数据库名;User ID=账户;Password=密码

 

如果使用Windows身份验证,则连接字符串通常为:

 

Data Source=服务器名;Initial Catalog=数据库名;Integrated Security=SSPI或

 

Data Source=服务器名;Initial Catalog=数据库名;Trusted Connection=yes

 

服务器名:是指数据库所在的服务器名称,也可以写成IP地址;如果是本地服务器,可以写成“.”“(local)”“127.0.0.l”或“本地机器名称”

 

·SqlConnection 连接对象名=new SqlConnection();

  连接对象名.ConnectionString=连接字符串;

·连接字符串变量=连接字符串;

  SqlConnection 连接对象名 =new SqlConnection(连接字符串变量);

例:

SqlConnection conn=new SqlCounnection(); conn.ConnectionString=”Data Source=(local);Initial  Catalog=StudentRecord;Integrated  Security=SSPI”;或strConn=”Data Source=.;Initial Catalog=StudentRecord;Trusted_Connection=yes”;SqlConnection conn=new SqlConnection(strConn);

连接对象名.State   :

Broken 与数据源的连接断开

Closed  连接处于关闭状态

Connecting 连接对象正在与数据源连接

Executing  连接对象正在执行命令

Fetching   连接对象正在检索数据

Open   连接处于打开状态

·conn.State==ConnectionState.Open

 

打开与关闭数据库连接

 

设置好ConnectionString属性之后

 

连接对象名.Open();

 

连接对象名.Close();

 

连接对象名.Dispose();这种关闭不能再用Open打开

 

StateChange事件

 

连接状态更改时发生。该事件的处理程序接收一个StateChangeEventArgs类型的参数

 

有两个属性:CurrentState:用于获取连接的新状态

 

            OriginalState:用于获取连接的原始状态

 

使用Command对象执行SQL语句

 

向数据库发送SQL命令。如果是检索命令,那么从数据库取回的数据,可以放在DataAdapter或DataReader对象中。

 

Command主要成员:

Connection属性:获取或设置Command对象使用的Connection对象

CommandType属性:StoredProcedure 存储过程的名称

                   TableDirect:表的名称

  Text:SQL文本命令

CommandText属性:获取或设置要对数据库执行SQL命令

ExecuteNonQuery()方法:执行不返回行的SQL命令(Insert、Delete、Update), 并返回受影响的行数。

ExecuteReader()方法:执行Select命令,并返回一个生成的DataReader对象

ExecuteScalar()方法:执行Select命令,并返回查询所得的结果集中第一行的第 一列{单个值},忽略其他列或行,如果结果为空则返回 null引用,通常用于统计记录数、总和、平均数

 

Command对象使用一般步骤:

 

·创建Command对象,并设置其Connection属性

 

·设置CommandType和CommandText属性

 

·调用响应方法来执行SQL命令

 

·根据返回结果进行适当处理

创建并使用SqlCommand对象

·第一种

SqlCommand 命令对象名=new SqlCommand();

命令对象名.Connection=连接对象名;

命令对象名.CommandType=CommandType.枚举成员;

命令对象名.CommandText=命令文本;

方法返回值变量=命令对象名.Execute....();

·第二种

SqlCommand 命令对象名=new SqlCommand(命令文本,连接对象名);

命令对象名.CommandType=CommandType.枚举对象;

方法返回值变量=命令对象名.Execute....();

例:

SqlCommand  comm=new SqlCommand(“select count(*) from studentInfo”,conn);                 //conn是之前设置好的SqlConnection对象int iCount= comm.ExecuteScalar();MessageBox.Show(“studentInfo表中共有”+iCount.ToString()+”条记录”);注:ExecuteScalar()通常与聚合函数一起使用

使用DataReader对象读取数据

DataRead读取行的只进流的联机数据访问方式,DataRead数据是由数据库返回的只读、只能向下滚动的流信息,因此很适合应用在只需读取一次的数据。

主要成员:

FieldCount属性:获取当前行中的列数,默认值为-1;如果未放在有效的记录集,  

                则为0

HasRows属性:获取一个值,用于指示DataReader对象是否包含一行或多行

IsClosed属性:获取一个值,用于指示DataReader对象是否已关闭

RecordsAffected属性:获取执行SQL语句所更改、插入或删除的行数;如果执     

                    行的是Select语句,返回值为-1

Close()方法:关闭DataReader对象,每次用完都应该调用Close方法

GetName(int index)方法:获取指定列的名称;参数i为从0开始的列序号

GetOrdinal(string name)方法:在给定列的名称的情况下获取列序号;参数name 为列名称  

GetValue(int i)方法:获取以本机格式表示的指定列的值,该值为object类型;参 数i为从0开始的列序号

NextReault()方法:当读取批处理SQL语句的结果时,使数据读取器前进到下一  

                个结果集,返回值为布尔型,如果存在多个结果集,则为true

Read()方法:使数据前进到下一个记录;返回值为布尔型,如果还有记录,则true

例:SqlDataReader reader=comm.ExecuteReader(); //SqlConnection对象已设置好并打开,comm是之前设置好的SqlCommand对象     while(reader.Read())          {//读取一行数据}

数据适配器:DataAdapter对象

在DataSet与数据源之间起到桥梁作用。

 

属性:

 

SelectCommand:向数据库发送查询SQL语句。

 

DeleteCommand:向数据库发送删除SQL语句。

 

InsertCommand:向数据库发送插入SQL语句。

 

UpdateCommand:向数据库发送更新SQL语句。

 

主要的方法:

 

Fill方法:主要用于填充DataSet数据集

 

public int Fill(DataSet dataSet,string scTable);

 

dataSet:记录和架构填充的DataSet

 

srcTable用于表映射和源表的名称

 

返回值:已在DataSet中成功添加或刷新的行数

 

Update方法:更新数据库

 

填充DataSet数据集

 

SqlConnection conn;conn=new SqlConnection(“server=.;database=db_14;uid=sa;pwd=”);SqlCommand cmd=new SqlCommand(“select *from tb_command”,conn);SqlDataAdapter sda=new SqlDataAdapter();sda.SelectCommand=cmd;DataSet ds=new DataSet();sda.Fill(ds,”tb_XX”);dataGridView1.DataSource=ds.Table[0];

更新数据源:

DataTable dt=ds.Tables[“tb_XX”];sda.FillSchema(dt,SchemaType.Mapped);DataRow dr=dt.Rows.Find(txtNo.Text);dr[“姓名”]=txtName.Text.Trim();dr[“性别”]=txtSex.Text.Trim();dr[“年龄”]=txtAge.Text.Trim();dr[“奖金”]=txtjj.Text.Trim();SqlCommandBuilder cmdbudider=new SqlCommandBuilder(sda);sda.Update(dt);

数据集:DataSet对象

 

合并数据集:ds1.Merge(ds,true,MissingSchemaAction.AddWithKey);

 

复制DataSet:DateSet ds1=ds.Copy();

 

             dataGridView2.DataSource=ds1.Table[0];

 

 

C#连接SqlServer数据库(ADO.NET)