ADO.NET---ExcuteScalar()方法复习
ExcuteScalar(),返回的是查询结果的第一行第一列,返回值是object类型,一般用来查询表中有多少条数据,求最大值等
现在我们用ExcuteScalar()做个测试,需求:我要查询学生表里面有多少条数据.
存储过程:
IF OBJECT_ID('GetStudentsCountNum','P') IS NOT NULL
DROP PROCEDURE GetStudentsCountNum
GO
CREATE PROCEDURE GetStudentsCountNum
AS
SELECT COUNT (*) FROM dbo.T_USERS
GO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace ADO.NET查询结果集的第一行第一列
{
class Program
{
static void Main(string[] args)
{
//连接字符串
string sqlConStr = "server=.;database=DB_USERS;uid=sa;pwd=Password_1";
//1.创建连接对象
SqlConnection scon = new SqlConnection(sqlConStr);
//2.创建命令对象
SqlCommand scmd = new SqlCommand();
scmd.CommandText = "GetStudentsCountNum";
scmd.CommandType = CommandType.StoredProcedure;
scmd.Connection = scon;
//3.打开连接
scon.Open();
//4,执行命令
int result = (int)scmd.ExecuteScalar();
//5.处理数据
Console.WriteLine("查询到的数据行总数是{0}", result);
//6。关闭连接
scon.Close();
Console.ReadKey();
}
}
}
ExcuteScalar()方法测试
程序执行效果图:

然而ExcuteScalar还有一个特别的应用。
比如,我有一个数据库表,主键是自动增长的,大家都知道,这个时候,向表里面插入数据,不能插入自动增长的主键字段,但是我现在有这样一个需求:
我要得到每次插入到表中的数据的主键值。。这个时候,就轮到ExcuteScalar出马了。所以这个时候,我们可以得出结论:我们不要以为只有select操作的时候才去用ExcuteScalar,像这个Insert操作由于输出的是一行一列的值,也可以使用ExcuteScalar方法。
具体的使用方法是。在插入语句的values关键字前面加上 output inserted.ID ,这里的ID指的是主键字段。
创建存储过程:(等等我们这里创建两个,一个是错误的实例,一个是正确的实例)
IF OBJECT_ID('Insert_Users','P') IS NOT NULL
DROP PROCEDURE Insert_Users
GO
CREATE PROCEDURE Insert_Users
@name NVARCHAR() ,
@pwd NVARCHAR (),
@age INT ,
@errorTimes INT
AS
INSERT INTO dbo.T_USERS
( T_NAME, T_PWD, T_AGE, T_ErrorTimes )
OUTPUT Inserted.T_ID VALUES ( )
)
'@age', -- T_AGE - int
'@errorTimes' -- T_ErrorTimes - int
)
GO
错误实例,:age和errorTimes字段在数据库中是int类型的,在创建存储过程的时候,不能给参数加引号,不然在编写程序的时候,报错

即使在程序中,单独对这个参数,申明int类型的参数,也还是报错。所以要特别注意。
正确的存储过程实例:
IF OBJECT_ID('Insert_Users','P') IS NOT NULL
DROP PROCEDURE Insert_Users
GO
CREATE PROCEDURE Insert_Users
@name NVARCHAR() ,
@pwd NVARCHAR (),
@age INT ,
@errorTimes INT
AS
INSERT INTO dbo.T_USERS
( T_NAME, T_PWD, T_AGE, T_ErrorTimes )
OUTPUT Inserted.T_ID VALUES ( @name, -- T_NAME - nvarchar()
@pwd, -- T_PWD - nvarchar()
@age, -- T_AGE - int
@errorTimes -- T_ErrorTimes - int
)
GO
正确的存储过程实例
代码实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace 当主键是自动增长的时候_我们要查询每次插入的时候的主键值的时候用ExcuteScalar
{
class Program
{
static void Main(string[] args)
{
string sqlConStr = "server=.;database=DB_USERS;uid=sa;pwd=Password_1";
//1.创建连接对象
SqlConnection scon = new SqlConnection(sqlConStr);
//2.创建命令对象
SqlCommand scmd = new SqlCommand();
scmd.CommandText = "Insert_Users";
scmd.CommandType = CommandType.StoredProcedure;
scmd.Connection = scon;
//3.打开连接
scon.Open();
//设置参数
scmd.Parameters.Add(new SqlParameter("@name", "Test"));
scmd.Parameters.Add("));
scmd.Parameters.Add());
SqlParameter parameters = new SqlParameter();
parameters.Value = ;
parameters.DbType = DbType.Int32;
parameters.ParameterName = "@age";
scmd.Parameters.Add(parameters);
//4执行命令
int id= (int)scmd.ExecuteScalar();
Console.WriteLine("你这次插入的数据的主键是{0}", id);
Console.ReadKey();
}
}
}
编码实现
程序运行的效果图:

注意:如果想要还原主键字段,可以使用truncate table 表名,把数据清空,然后执行的时候,就是从主键1开始的
ADO.NET---ExcuteScalar()方法复习的更多相关文章
- PHP面向对象之魔术方法复习
魔术方法复习 2014-9-2 10:08:00 NotePad++ By jiancaigege 飞鸿影~========================= 1.__construct() 构造方法 ...
- 使用相对路径导入ado库的方法
作者:朱金灿 来源:http://blog.csdn.net/clever101 常用的导入ado库的语句: #import "c:\program files\common files\s ...
- 个人常用jq方法复习
$("#elem").on({ mouseover:function(){}, mouseout:function(){}, }); $(ele).closest("di ...
- ADO.NET 学习笔记 入门教程
本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=57&page=1&extra=#pid63 这是本人在 ...
- ADO.net基础学习总结(二)
将连接字符串放入配置文件中 1.添加一个“应用程序配置文件:app.config” <?xml version="1.0" encoding="utf-8" ...
- ado.net的简单数据库操作(二)之封装SqlHelperl类
今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ...
- vc++用ADO方式连接oracle问题
今天装了个oracle客户端,准备写个访问远程oracle的程序.用的是vs2010,采用ADO的连接方法连接oracle,结果运行的时候总是报下面的错: 从提示可以看出是没有找到OraOLEDBup ...
- ADO.NET知识汇总
这又是一篇记录平常工作笔记的博客,无论是在排版还是解说上都不会有太多要求.同时这也是一篇不上博客园首页的博客,Just记录一些工作笔记. vSelect返回单个值 string connSQL = @ ...
- vc6.0 通过ADO(udl)连接sql 2008
转载声明:本文转自http://blog.sina.com.cn/s/blog_7328b9dd0100pkbw.html茗之的博客 首先声明:本文是针对vc与sql菜鸟的,高人请让路. 本文讲解 ...
随机推荐
- 利用Mysql提供的字符串方法查找字符串中某字符出现的次数
有这么一个需求,查出分类中没有子分类的一级分类,脑海中首次出现的解决思路和这样的 先使用PHP查出所有的一级分类 递归查询一级分类是否有子分类 将没有子分类的一级分类汇总 但觉的这样处理太麻烦了,然后 ...
- java/.net-常用工具下载地址&常用学习网址&快捷键
HTML5 HTML5:http://www.html5cn.org/ php常用网址 thinkphp框架:http://www.thinkphp.cn/ wampserver开发服务器:http: ...
- 手机前端页面js
(function () { var phoneWidth = parseInt(window.screen.width); var phoneScale = phoneWidth / 640; va ...
- TargetProcess公司敏捷开发历程-开发实践篇
- 导出websphere内存镜像
1. 将脚本放致profiles\appservername\bin下 2. 查看一下soap host(在控制台port中能够看到) 3. 运行例如以下命令:./wsa ...
- BW基于ALE的主数据增量机制分析
1 概述 前段时间在项目中碰到一个问题,地点物料0MAT_PLANT_ATTR属性主数据因为有两个多月没有做增量更新,导致在之后的每次增量抽取活动中因为抽取的数据量过大使得在源系统的进程中发生 ...
- 基于Bootstrap的后台通用模板
人总是比较刁的,世界的时尚趋势不断变化,对系统UI的审美也在不断疲劳中前进,之前觉得好好的UI,过了半年觉得平平无奇,不想再碰,需要寻求新的兴奋点. 下面这套UI就是半年前的(今日:2015-12), ...
- CentOS 6.6 配置PuTTY远程登录
1. 下载与安装 可以下载putty-0.63-installer.exe(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.htm ...
- java中的==和equals
1,==用于比较基本数据类型,和引用类型.而equals是Object上的方法,可以被子类重写,用于判断内容一致. 比较奇葩的是,java基本数据类型(byte,short,int,long,floa ...
- 谷歌面经 Tree Serialization
http://www.careercup.com/question?id=4868040812396544 You should transform an structure of multiple ...