• 欢迎访问我爱CSharp学习网,这里有最新最全的C#书籍,C#视频。
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏我爱C#学习网吧
  • 推荐使用最新版Chrome浏览器和火狐浏览器访问本网站

C#基础知识-十分钟带你了解SQL的基本操作(十三)

C#杂烩 52csharp 2291次浏览 0个评论 扫描二维码

上一篇中讲了数据库中的基本的知识,还有一些常见的命令,其实当你使用久了就会发现很多的数据库命令其实是没有那么复杂,除了Select中比较复杂的查询,下面我们使用ADO.NET类库来对Sql Server数据库进行操作,在实际操作之前先了解一下.NET 中的ADO.NET,很多人都说这个过时了,现在都流行ORM,像使用Linq、或MVC+EF,这样的模式,也有人说Linq的性能不如直接使用ADO.NET执行,具体哪个好或哪个不好我也不好说,有兴趣的先了解,再自己去评判。


理 论 部 分

什么是ADO.NET?

ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据。ado.net可以使开发人员一致操作方法来针对不同的数据库,不同数据库的命令会有差别。

使用ado.net操作数据库有以下步骤:

1. 创建好连接字符串,使用SqlConnection对象与数据库连接;

2. 建立SqlCommand对象,负责SQL语句或者存储过程的调用;

3. 对执行完SqlCommand SQL语句或其它函数后返回“结果”操作。

对返回的“结果”操作有以下两个类:

1. 使用SqlDataReader对象,直接读取数据库,需要实时保持与数据库连接。

2. 使用DataSet + SqlDataAdapter对象,一次加载完要操作的数据,可断开与数据库连接,最后再一次性提交数据。

从网络上下载的结构图,看不懂没关系,下面我们来实操:

C#基础知识-十分钟带你了解SQL的基本操作(十三)

 

实 操 部 分

1. 连接字符串的写法,这里直接在程序中声明一个变量:

string connectString = “Data Source=.;Initial Catalog=Student;Integrated Security=True”;

  命令解析:“Data Source=”为数据库服务器的位置,这里使用了“.”代表是数据库为本机;“Initial Catalog” 为要连接的数据库的名称这里为“Student”数据库; “Integrated Security”为验证身份的方式,可选项有:true、false,“true”为本地windows集成验证,则使用本地账户,“false”则使用数据库账户来验证,如选择“false”则还需要添加“uid”和“pwd”。


2. 使用SqlConnection对象创建连接:

命令空间:using System.Data.SqlClinet.SqlConnection;

实例化“SqlConnection”使用上面的连接字符串作为参数,返回一个SqlConnection,并打开连接

SqlConnection sqlCnt = new SqConnection(connectString);

sqlCnt.Open() ;

   对数据库操作完毕,需要关闭 连接对象 释放资源:

sqlCnt.Close() ;


3. 使用SqlCommand来操作数据库

命名空间:System.Data.SqlClient.SqlCommand ;

SqlCommand对象可以执行以下三种操作方式;

1.SQL语句:Command.CommandType = CommandType.Text ;

        2.存储过程:Command.CommandType = CommandType.StoredProcedure ;

       3.整张表:Command.CommandType = CommandType.TableDirect ;

   以上三种不同操作方式可以判断出,通过对Command对象的CommandType属性赋值来确定其中一种操作。

  实例化一个SqlCommand对象:

SqlCommand command = new SqlCommand();

Command.Connection = sqlCnt; //绑定一个SqlConnection对象

第二种实例化方法:

Sqlcommand command = sqlCnt.CreateCommand(); //通过sqlCnt的方法返回

   

常用操作实例:

1) 执行SQL语句,这里没有返回查询结果集,了解一下就OK了。

SqlCommand cmd = sqlCnt.CreateCommand(); //创建SqlCommand对象

cmd.CommandType = CommandType.Text;   //Sql语句类型

cmd.CommandText = “SELECT * FROM StudentInfo”; //查询表


2) 调用存储过程

SqlCommand cmd = sqlCnt.CreateCommand();

cmd.CommandType = CommandType.StoredProcedure;

cmd.CommandText=”这里输入存储过程的名称”;


3) 全表加载

SqlCommand cmd = sqlCnt.CreateCommand() ;

cmd.CommandType = CommandType.StoredProcedure ;

cmd.CommandType = CommandType.TableDirect ; 

cmd.CommandText = “表名” ;


常用操作方法:

command.ExecuteNonQuery(): 返回受影响函数,如增、删、改操作;

command.ExecuteScalar():执行查询,返回首行首列的结果;

command.ExecuteReader():返回一个数据流(SqlDataReader对象)。

4. SqlDataReader对象

命名空间:System.Data.SqlDataReader;

SqlDataReader对象提供只读单向数据的功能,只读单向的意思是只能够依次读取下一条数据,不能修改,和DataSet中数据可以任意读取修改是有差别的。

它有一个重要的方法,Read() 返回值是一个布尔类型的值,作用是前进到下一条数据:

SqlCommand cmd = sqlCnt.CreateCommand() ;

cmd.CommandType = CommandType.Text;

cmd.CommandText = “SELECT  *  FROM  ShutdentInfo”;

SqlDataReader reader = cmd.ExecuteReader(); //执行SQL,返回一个”流”

While(reader.Read())

{

Console.Write(reader[“name”]); //打印每个学生的名字

}


5. DataSet对象

 5.1 SqlDataAdapter

命名空间:System.Data.SqlDataAdapter ;

SqlDataAdapter是SqlCommand和DataSet之间的桥梁,实例化SqlDataAdapter对象:

SqlConnection sqlCnt = new SqlConnection(connectString);  //实例化sqlConnection对象,参数为连接字符串

SqlCnt.Open();


//创建SqlCommand对象

SqlCommand mySqlCommand = new sqlCnt.CreateCommand() ;

mySqlCommand.CommandType = CommandType.Text ;

mySqlCommand.CommandText = “SELECT * FROM StudentInfo”;


//创建SqlDataAdapter对象

SqlDataAdapter myDataAdapter = new SqlDataAdapter() ;

myDateAdapter.SelectCommand = mySqlCommand ;  //为SqlDataAdapter对象绑定所要执行的SqlCmmand对象


这样的代码看起来非常的多余,很复杂,上面的代码可以简化成:

SqlConnection sqlCnt = new SqlCnnection(connectString) ; 

sqlCnt.Open();


//这里隐藏了SqlCommand对象定义和对SqlCommand的绑定,但在下面代码中SqlDataAdapter对象构造函数中相当于上面的代码。

SqlDataAdapter myDataAdapter = new SqlDataAdapter(“SELECT * FROM StudentInfo”, sqlCnt);

属性和方法

myDataAdapter.SelectCommand属性:SqlCommand变量,封装Select语句;

myDataAdapter.InsertCommand属性:SqlCommand变量,封装Insert语句;

myDataAdapter.UpdateCommand属性:SqlCommand变量,封装Update语句;

myDataAdapter.DeleteCommand属性:SqlCommand变量,封装Delete语句。

myDataAdapter.fill():将执行结果填充到Dataset中,会隐藏打开SqlConnection并执行SQL等操作。

5.2 DataSet对象

命名空间:System.Data.DataSet 

数据集,本地微型数据库,可以存储多张表。

第一步需要将SqlDataAdapter返回的数据集填充到DataSet中,在SqlDataAdapter中使用Fill()方法。

SqlDataAdapter myDataAdapter = new SqlDataAdapter(“SELECT * FROM StudentInfo”,sqlCnt);

DataSet myDataSet = new DataSet(); //创建DataSet

myDataAdapter.Fill(myDataSet,”Studens”); //将返回的数据集填充到DataSet中,第二个参数为表名


访问DataSet中的数据

SqlDataAdapter myDataAdapter = new SqlDataAdapter(“SELECT * FROM StudentInfo”,sqlCnt);

DataSet  myDataSet = newDataSet();

myDataAdapter.Fill(myDataSet,”Studens”);


DataTable myTable = myDataSet.Tables[“Studens”]; //将DataSet中的表格赋值给DataTable对象

foreach(DataRow myRow in myTable.Rows)

{

foreach(DataColumn myColumn in myTable.Columns)

{

Console.writeLine(myRow[myColumn]); //遍历表中的每个单元格

        }

}


小结:在DataSet中有很多的方法和属性还没有详细的写出来,需要详细学习的朋友可以通过复制下面的链接到浏览器打开: http://www.cnblogs.com/rainman/archive/2012/03/13/2393975.html#m5 ,我这篇文章是参考自这里,并将一些细节上的东西写清楚。这里没有将DataSet写的详细的原因是因为我们很少会将一个表全部加载到DataSet中,这样太耗费资源,想象一下一个百万级的数据表全部加载到电脑内存中会是什么样呢?当然除非你的数据量非常少那么另当别论,对于数据量大的表一般都是使用数据库中的存储过程,通过分页读取的方式从数据库中取出需要的数据。


估计被标题骗了,看到这里不止十分钟了吧,哈哈!



我爱CSharp学习网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#基础知识-十分钟带你了解SQL的基本操作(十三)
喜欢 (3)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址