分享
 
 
 

ADO.NET---ExcuteScalar()方法复习

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

ExcuteScalar(),返回的是查询结果的第一行第一列,返回值是object类型,一般用来查询表中有多少条数据,求最大值等

现在我们用ExcuteScalar()做个测试,需求:我要查询学生表里面有多少条数据.

存储过程:

1IF OBJECT_ID('GetStudentsCountNum','P') IS NOT NULL2DROPPROCEDURE GetStudentsCountNum3GO4CREATE PROCEDURE GetStudentsCountNum5AS6SELECT COUNT (*) FROM dbo.T_USERS7GO8

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Data;7usingSystem.Data.SqlClient;89namespaceADO.NET查询结果集的第一行第一列10{11classProgram12{13staticvoidMain(string[] args)14{15//连接字符串16stringsqlConStr ="server=.;database=DB_USERS;uid=sa;pwd=PassWord_1";1718//1.创建连接对象19SqlConnection scon =newSqlConnection(sqlConStr);2021//2.创建命令对象22SqlCommand scmd =newSqlCommand();23scmd.CommandText ="GetStudentsCountNum";24scmd.CommandType =CommandType.StoredProcedure;25scmd.Connection =scon;2627//3.打开连接28scon.Open();2930//4,执行命令31intresult = (int)scmd.ExecuteScalar();3233//5.处理数据34Console.WriteLine("查询到的数据行总数是{0}", result);3536//6。关闭连接37scon.Close();383940Console.ReadKey();41424344}45}46}

ExcuteScalar()方法测试

程序执行效果图:

然而ExcuteScalar还有一个特别的应用。

比如,我有一个数据库表,主键是自动增长的,大家都知道,这个时候,向表里面插入数据,不能插入自动增长的主键字段,但是我现在有这样一个需求:

我要得到每次插入到表中的数据的主键值。。这个时候,就轮到ExcuteScalar出马了。所以这个时候,我们可以得出结论:我们不要以为只有select操作的时候才去用ExcuteScalar,像这个Insert操作由于输出的是一行一列的值,也可以使用ExcuteScalar方法。

具体的使用方法是。在插入语句的values关键字前面加上 output inserted.ID ,这里的ID指的是主键字段。

创建存储过程:(等等我们这里创建两个,一个是错误的实例,一个是正确的实例)

1IF OBJECT_ID('Insert_Users','P') IS NOT NULL2DROP PROCEDURE Insert_Users3GO4CREATE PROCEDURE Insert_Users5@name NVARCHAR(10) ,6@pwd NVARCHAR (10),7@age INT ,8@errorTimes INT9AS10INSERT INTO dbo.T_USERS11( T_NAME, T_PWD, T_AGE, T_ErrorTimes )12OUTPUT Inserted.T_ID VALUES ('@name', -- T_NAME - nvarchar(10)13'@pwd', -- T_PWD - nvarchar(10)14'@age', -- T_AGE -int15'@errorTimes'-- T_ErrorTimes -int16)17GO18

错误实例,:age和errorTimes字段在数据库中是int类型的,在创建存储过程的时候,不能给参数加引号,不然在编写程序的时候,报错

即使在程序中,单独对这个参数,申明int类型的参数,也还是报错。所以要特别注意。

正确的存储过程实例:

1IF OBJECT_ID('Insert_Users','P') IS NOT NULL2DROP PROCEDURE Insert_Users3GO4CREATE PROCEDURE Insert_Users5@name NVARCHAR(10) ,6@pwd NVARCHAR (10),7@age INT ,8@errorTimes INT9AS10INSERT INTO dbo.T_USERS11( T_NAME, T_PWD, T_AGE, T_ErrorTimes )12OUTPUT Inserted.T_ID VALUES ( @name, -- T_NAME - nvarchar(10)13@pwd, -- T_PWD - nvarchar(10)14@age, -- T_AGE -int15@errorTimes -- T_ErrorTimes -int16)17GO18

正确的存储过程实例

代码实现如下:

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;6usingSystem.Data;7usingSystem.Data.SqlClient;89namespace当主键是自动增长的时候_我们要查询每次插入的时候的主键值的时候用ExcuteScalar10{11classProgram12{13staticvoidMain(string[] args)14{15stringsqlConStr ="server=.;database=DB_USERS;uid=sa;pwd=Password_1";1617//1.创建连接对象18SqlConnection scon =newSqlConnection(sqlConStr);1920//2.创建命令对象21SqlCommand scmd =newSqlCommand();22scmd.CommandText ="Insert_Users";23scmd.CommandType =CommandType.StoredProcedure;24scmd.Connection =scon;252627//3.打开连接28scon.Open();2930//设置参数31scmd.Parameters.Add(newSqlParameter("@name","Test"));32scmd.Parameters.Add(newSqlParameter("@pwd","123456"));33scmd.Parameters.Add(newSqlParameter("@errorTimes",2));343536SqlParameter parameters =newSqlParameter();37parameters.Value =2;38parameters.DbType =DbType.Int32;39parameters.ParameterName ="@age";40scmd.Parameters.Add(parameters);4142//4执行命令43intid= (int)scmd.ExecuteScalar();4445Console.WriteLine("你这次插入的数据的主键是{0}", id);46Console.ReadKey();47484950}51}52}

编码实现

程序运行的效果图:

注意:如果想要还原主键字段,可以使用truncate table 表名,把数据清空,然后执行的时候,就是从主键1开始的

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有