于是,第二步就是向数据库发出自己的意愿和礼物。
可以发送一条SQL语句,或者向数据库发送数据库中本身集成好的批处理过程(类似存储过程等),这样数据库才可以根据这些返回相应的结果。
在SqlServer中,它的指令发送是用SqlCommand对象来负责的。正如一个公司,跑关系的是跑关系的,负责具体业务的是负责具体业务的。
所以SqlCommand对象的业务就是发送用户的指令到数据库。
下面的很多,不用看完,对照后面实例,看下,明白一下,微软自动有智能提示,它直接造成我们懒人不用记,嘿嘿。
SqlComma对象属性
CommandText 获取或者设置 要对数据库执行的SQl语句或者存储过程
CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间。有时因错误不能执行,因为设置一个时间,如果超时就意味着错误。
CommmandType 获取或设置一个值,该值指示如何解释CommandText属性
Connection 获取或设置Command的此实例使用的Connection
Container(从Component继承) 获取IContainer,包含Component
DesignTimeVisible 获取或设置一个值,该值指示命令对象是否应在Windows窗体设计器控件中可见
Parameters 获取ParameterCollection
Site(从Component继承) 获取或设置Component的ISite
Transaction 获取或设置将在其中执行Command的Transaction相关东西。就是与事务(相当于SQL中的批处理)相关的东西
UpdateRowSource 获取或设置命令结果在由DbDataAdapter的Update方法使用时如何应用DataRow。也就是当得到结果集,且变成我们自己的DataSet时
,但是这时我们操作DataSet有更新、修改或删除DataSet到数据库时,这个结果怎么再次返回到DataRow中进行呈现呢?
SqlCommand对象方法
Cancel 尝试取消Command的执行
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。
CreateParameter 创建Parameter对象的新实例
Dispose 已重载,释放由Component战胜的资源
ExecuteNonQuery 已重载,将CommandText发送到Connection并生成一个DataReader。就是把Sql语句发送,进行非查询的执行,就是一个一个的记录。
相当于水管式查询,NonQuery就是指令这个的。服了这解释,只有白话才明白
ExcecuteReader 已重载,将CommandText发送到Connection并生成一个DataReader(单行查询)
ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。因此它对于聚合查询相当有用,比如查询记录有多少行
返回的结果集只能有一行且只有一行,因为,这个就是直接得这个数据的。
ExecuteXmlReader 将CommandText发送到Connection并生成一个XmlReader对象(同DataSet类似)
GetHashCode 用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用
GetLifeTimeService 检索控制此实例的生存期策略的当前生存期服务对象
GetType 获取当前实例的Type
InitializeLifetimeService 获取控制此实例的生成策略的生存期服务对象
Prepare 在SqlServer的实例上伊娃命令的一个准备版本
ResetCommandTimeout 将CommnadTimeout属性重置为期默认址
说了关于的SqLCommmand,它有三种创建方式:
1.直接new,然后设置对象的相关属性,如设置CommnadText和Connnecton
2.使用构造函数来执行,意思在new对象,把相关属性作参数,起到上面1的作用,幸好前段时间学了C++,明白了构造函数。
3.用CreateCommand方法来创建一个特定的连接命令。
- Imports System.Data.SqlClient
- Module Module1
- Sub Main()
- Dim cn As New SqlConnection
- cn.ConnectionString = "pwd=123456;uid=sa;Initial Catalog=学生成绩管理系统;Data Source=ZHENG"
- cn.Open()
- Dim cmd As New SqlCommand
- cmd.CommandText = "select * from 学生信息"
- cmd.CommandType = CommandType.Text
- cmd.Connection = cn
- '---------------下面是结果集的处理,可略过-----
- Dim dap As New SqlDataAdapter(cmd)
- Dim ds As New DataSet
- dap.Fill(ds)
- '---------------只看下面的,对SqlCommand的属性的方法---
- Console.WriteLine("连接成功,发送成功,看看命令相关属性情况:")
- Console.WriteLine()
- Console.WriteLine("CommandText查询SQl语句:" & cmd.CommandText)
- Console.WriteLine("CommandTimeout查询超时(秒):" & cmd.CommandTimeout)
- Console.WriteLine("CommandType查询类型(文本,存储过程、表名,默认文本(SQl)):" & cmd.CommandType)
- Console.WriteLine("Connection连接对象:" & cmd.Connection.ConnectionString)
- Console.WriteLine("DesignTimeVisible窗体设计器中是否可见:" & cmd.DesignTimeVisible)
- Console.WriteLine(cmd.Parameters)
- Console.WriteLine(cmd.Transaction)
- Console.WriteLine("UpdatedRowSource刷记录时在RowSet中的表现:" & cmd.UpdatedRowSource)
- cn.Close()
- Console.ReadKey()
- End Sub
- End Module
![](https://img-my.csdn.net/uploads/201301/28/1359359476_5788.jpg)
上面按时平辅对象的方式:先设置属性,再使用对象的方法,这是我们OOP入门学的。
然后面下面再用一个简便的,就是用构造法,直接构造对象,再用方法,其实工作量一样,只是代码少了点。
- Imports System.Data.SqlClient
- Module Module1
- Sub Main()
- Dim cnStr As String = "pwd=123456;uid=sa;Initial Catalog=学生成绩管理系统;Data Source=ZHENG"
- Dim cn As New SqlConnection(cnStr)
- cn.Open()
- Dim sql As String = "select * from 学生信息"
- Dim cmd As New SqlCommand(sql, cn)
- '---------------下面是结果集的处理,可略过-----
- Dim dap As New SqlDataAdapter(cmd)
- Dim ds As New DataSet
- dap.Fill(ds)
- '-----------------------------------------------
- Console.WriteLine(cmd.CommandType)
- cn.Close()
- Console.ReadKey()
- End Sub
- End Module
![](https://img-my.csdn.net/uploads/201301/28/1359360347_6910.jpg)
这里的commandText它的默认值就是text,即SQL语句,所以在构造函数时,没有使用指明它的值。但最后成功后,查询它的值
可以看出是1,就是CommandType.Text,即值是1