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菜鸟的,高人请让路. 本文讲解 ...
随机推荐
- [Aaronyang] 写给自己的WPF4.5 笔记20 [3d课 1/4]
假设你是高中毕业的,ok,数学知识几何知识中,我们学过 x,y,z 3个轴然后就可以画出形状了. 1. 新建空白窗体,grid换成canvas,然后新增一个Viewport3D元素 3d中显示的 ...
- 使用ClipboardUtils兼容API LEVEL 11以下实现复杂粘贴
实现功能:复杂粘贴内容 问题描述:android.content.ClipboardManager在APILevel 11之后才可以使用,而我们目前还要兼容API Level 10(2.3.3) 解决 ...
- 关于meta知多少
本来打算写关于手机端的知识,想了想先从meta着手.接下来请大家看几个网站的例子. 一.天猫(http://m.tmall.com) <title>天猫触屏版</title> ...
- 《objective-c基础教程》学习笔记(八)—— 拆分接口和实现
在之前的项目中,我们编程都是直接写在一个main.m文件中.类的main()函数,@interface和@implementation部分都塞进一个文件.这种结构对于小程序和简便应用来说还可以.但是项 ...
- Hadoop 生态系统
1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归 ...
- ODAC (V9.5.15) 学习笔记(二十一)数据复制
用TVirtualTable在内存中缓存TOraQuery中的数据,主要应用场景是参照其他数据,需要将TOraQuery中的数据复制到TVirtualTable,由于没有类似于TClientDataS ...
- C++ Copy Elision
故事得从 copy/move constructor 说起: The default constructor (12.1), copy constructor and copy assignment ...
- python 字符串复制
通过变量来进行赋值 fstr = 'strcpy'sstr = fstrfstr = 'strcpy2'print sstr
- 【百度地图学习-一】初始化以及TextOverlay
一.百度地图的初始化 主要用到三个类: 1.BMapManager:使用地图sdk前需先初始化BMapManager.BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创 ...
- c/c++: c++继承 内存分布 虚表 虚指针 (转)
http://www.cnblogs.com/DylanWind/archive/2009/01/12/1373919.html 前部分原创,转载请注明出处,谢谢! class Base { pu ...