谁知道sqlCommand几种方法的总结

 我来答
年华35kvAI58
推荐于2017-09-20 · 超过56用户采纳过TA的回答
知道答主
回答量:177
采纳率:0%
帮助的人:134万
展开全部
此类不能被继承。我觉得这个类就是起到一个桥梁的作用。他连接.NETt和SQL Server;将我们在客户端设置的sql语句传递给sql;再将sql的值传递给客户端
这个类中定义了很多的方法和属性来帮助我们完成不同的sql语句;总结三种在机房收费系统中用到的方法
第一种方法:ExecuteScalar
作用: 执行查询返回值: 返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。System.Object 结果集中第一行的第一列;如果结果集为空,则为空引用(在 Visual Basic 中为Nothing)适用情况: 使用ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与使用 ExecuteReader 方法,然后使用 SqlDataReader 返回的数据执行生成单个值所需的操作相比,此操作需要的代码较少。 示例代码:
在VB.NET中从数据库中取出单个值----使用从recharge求和的语句和
Imports System.Data ' 创建表类型的变量需要引用的空间 Imports System.Data.SqlClient '创建sql数据库连接需要引用的空间 Imports Entity Imports DateBaseHelper Public Class ConsumeInfoDAL '得到T_Recharge中全部的充值金额 Public Function GetBlance(ByVal strID As String, ByVal consumeCash As String) As String '设置传入sql中的T_SQL语句:获得充值的全部金额 Dim strRecharge As String = "SELECT SUM(cast(RechargeCash as int )) FROM T_RechargeInfo where CardID ='" + strID + "' " '打开数据库 执行上面的sql语句得到结果 关闭数据库 Dim con As New DBHelper Dim recharge As String con.Open() '需要处理如果表中没有记录那么返回的是false '如果返回false 充值为0 If con.ExecutesqlScalar(strRecharge) = False Then recharge = " 0" Else recharge = con.ExecutesqlScalar(strRecharge) End If con.Close() '返回结果 Return recharge End Function End Class DBHelper类,将对数据库的常用操作定义成了方法Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Text Imports System.Configuration Imports Entity Public Class DBHelper Private myConnection As New SqlConnection '表示数据连接控件 Private CmdString As String '表示SQL语句命令 Private Cmd As New SqlCommand '表示SQL命令语句的执行 Private Reader As SqlDataReader '表示返回的DataReader对 '********************************************** ' <summary> ' 打开数据库 ' </summary> ' <returns> ' Boolean true:连接成功 false:连接失败 ' </returns> '********************************************** Public Function Open() As Boolean '通过读取app来获得连接字符串 Dim myConnectionString As String = ConfigurationManager.AppSettings("Connstr") '表示数据字符串 '传入连接字符串 myConnection.ConnectionString = myConnectionString Try myConnection.Open() Return True Catch ex As Exception Return False End Try End Function '********************************************** ' <summary> ' 关闭数据库 ' </summary> '********************************************** Public Sub Close() Cmd.Dispose() myConnection.Close() End Sub '********************************************** ' <summary> ' 执行传入的sql语句 ' </summary> ' <param name="strSQL"> 传入到数据库中的SQL语句</param> ' <returns> ' Integer 返回查询到的结果集的第一行第一列 ' </returns> '********************************************** Public Function ExecutesqlScalar(ByVal strSQL As String) As String Cmd.Connection = myConnection Cmd.CommandText = strSQL 'Dim flag As Object Try '返回查询到的第一行第一列的值,其他行和列忽略 Return Cmd.ExecuteScalar Catch e As Exception Return False End Try End Function End Class 第二种:ExecuteNonQuery
作用: 对连接执行 Transact-SQL 语句并返回受影响的行数。返回值: 类型:System.Int32 受影响的行数。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。 如果正在执行插入或更新操作的表上存在触发器,则返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。 对于其他所有类型的语句,返回值为 -1。 如果发生回滚,则返回值也是 -1。 适用情况:
1.使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句;ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。
2.ExecuteNonQuery也会返回后运行查询影响的记录数。但是,ExecuteNonQuery不返回任何行或列中的存储过程。如果您只需要知道更改行数,则使用插入、 更新或删除语句时最有用的ExecuteNonQuery方法。在存储过程中使用 SELECT 语句,您收到-1,因为查询不会影响任何行。
示例代码:修改密码--执行存储过程;在存储过程中使用 Update 语句,您收到影响的行数。存储过程代码:create proc PROC_Modify @UserID char(20),@UserPwd char(20) as update T_UserInfo set UserPwd =@UserPwd where UserID =@UserID go VB.NET代码 :
Imports System.Data ' 创建表类型的变量需要引用的空间 Imports System.Data.SqlClient '创建sql数据库连接需要引用的空间 Imports Entity Imports DateBaseHelper Public Class UserInfoDAL '********************************************** ' <summary> ' 修改密码 ' </summary> ' <param name="< enUser >"><userinfo对象,通过ui层给userid和userpwd赋值></param> ' <returns> ' <boolean> true:代表修改密码成功 false:代表修改密码失败 ' </returns> '********************************************** Public Function AlterPwd(ByVal enUser As UserInfoEntity) As Boolean Implements IUserinfo.AlterPwd Dim flag As Boolean '设置存储过程参数 Dim strProc As String = "PROC_Modify" Dim sqlParameter() As SqlParameter = { New SqlParameter("UserID", enUser.T_UserID), New SqlParameter("UserPwd", enUser.T_UserPWD)} '实例化con 打开数据库 调用执行存储过程函数 关闭数据库 Dim con As New DBHelper con.Open() flag = con.ExecuteProcBool(strProc, sqlParameter) con.Close() Return flag End Function End Class DBHelper中相对应的方法:
Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Text Imports System.Configuration Imports Entity Public Class DBHelper Private myConnection As New SqlConnection '表示数据连接控件 Private CmdString As String '表示SQL语句命令 Private Cmd As New SqlCommand '表示SQL命令语句的执行 Private Reader As SqlDataReader '表示返回的DataReader对 '********************************************** ' <summary> ' 执行有参数的存储过程 ' </summary> ' <param name="strProc"> 存储过程名字</param> '<param name="sqlParameter">存储过程需要的参数</param> ' <returns> ' Boolean true:代表成功执行了存储过程 false:代表没有成功执行 ' </returns> '********************************************** Public Function ExecuteProcBool(ByVal strProc As String, ByVal sqlParameter As SqlParameter()) As Boolean '连接数据库将存储名称和参数传递给cmd Cmd.Connection = myConnection '指明为存储过程 Cmd.CommandType = CommandType.StoredProcedure Cmd.CommandText = strProc Cmd.Parameters.AddRange(SqlParameter) Try '执行存储过程中的语句返回boolean Cmd.ExecuteNonQuery() Return True Catch e As Exception Return False End Try End Function End Class 第三种方法:ExecuteReader
作用: 将CommandText 发送到 Connection 并生成一个 SqlDataReader。 解释1:将SQL语句发送到指定连接 生成一个SqlDataReader对象
解释2:当ExecuteReader()执行后返回一个SqlDataReader对象
两种解释实际上都在说明些方法就是给SqlDataReader对象一个可以访问查询到的结果的渠道。
返回值: 类型:System.Data.SqlClient.SqlDataReader SqlDataReader 对象。 SqlDataReader的Read方法可以使SqlDataReader前进到下一条记录,同样返回bool值,当下一条无记录返回false,则表示记录读取完毕;当下一条有数据时为true,将读取到的数据(当前的一条记录)暂存在SqlDataReader中。
示例代码:执行一个Select语句返回的结果是Bool类型;查看表中是否已经存在记录Imports System.Data ' 创建表类型的变量需要引用的空间 Imports System.Data.SqlClient '创建sql数据库连接需要引用的空间 Imports Entity Imports DateBaseHelper Public Class CardInfoDAL Public Function CheckStudentID(ByVal enStudent As Entity.StudentInfoEntity) As Boolean Implements ICardInfo.CheckStudentID Dim flag As Boolean '判断输入的stuID是否已经存在 Dim strSQL As String = "select * from T_StudentInfo where StuID='" + enStudent.T_StuID + "' " Dim con As New DBHelper con.Open() flag = con.ExecutesqlBool(strSQL) con.Close() Return flag End Function End ClassDBHelper相对应的方法:Imports System.Data Imports System.Data.SqlClient Imports System.Data.OleDb Imports System.Text Imports System.Configuration Imports Entity Public Class DBHelper Private myConnection As New SqlConnection '表示数据连接控件 Private CmdString As String '表示SQL语句命令 Private Cmd As New SqlCommand '表示SQL命令语句的执行 Private Reader As SqlDataReader '表示返回的DataReader对 '********************************************** ' <summary> ' 执行传入的sql语句 ' </summary> ' <param name="strSQL"> 传入到数据库中的SQL语句</param> ' <returns> ' Boolean true:代表成功执行了strSQL false:代表没有成功执行 ' </returns> '********************************************** Public Function ExecutesqlBool(ByVal strSQL As String) As Boolean Cmd.Connection = myConnection Cmd.CommandText = strSQL Dim flag As Boolean Try '返回是否查询到结果 Reader = Cmd.ExecuteReader() flag = Reader.Read() Reader.Close() Return flag Catch e As Exception Return False End Try End Function End Class
匿名用户
推荐于2017-10-09
展开全部
总结了一下,在任何时候都可以使用sqlcommand对象来完成您想要的操作.
使用sqlcommand对象来返回数据集合的方法
string strconn="data source=billgates;initial catalog=test;integrated security=SSPI;";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.CommandText ="select * from student";
sqlcmd.Connection=conn;
SqlDataAdapter adp=new SqlDataAdapter(sqlcmd);
DataTable dt=new DataTable();
adp.Fill(dt);
dataGrid1.DataSource=dt;

使用sqlcommand对象来返回SQL执行正确与否
string strconn="data source=billgates;initial catalog=test;integrated security=SSPI;";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.CommandText ="select * from student";
sqlcmd.Connection=conn;
try
{
sqlcmd.ExecuteNonQuery();
MessageBox.Show("success");
}
catch
{
MessageBox.Show("false");
}

使用sqlcommand对象来操作存储过程
string strconn="data source=billgates;initial catalog=test;integrated security=SSPI;";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand sqlcmd=new SqlCommand();
sqlcmd.CommandText ="a";
sqlcmd.CommandType=CommandType.StoredProcedure ;
sqlcmd.Connection=conn;
sqlcmd.Parameters.Add("@param1",textBox1.Text.Trim());
sqlcmd.Parameters.Add("@param2",textBox2.Text.Trim());
sqlcmd.Parameters.Add("@param3",textBox3.Text.Trim());

SqlDataAdapter adp=new SqlDataAdapter(sqlcmd);
DataTable dt=new DataTable();
adp.Fill(dt);
dataGrid1.DataSource=dt;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式