ExecuteNonQuery方法

ExecuteNonQuery方法主要用来更新数据。

通常使用它来执行Update、Insert和Delete语句。

该方法返回值意义如下:

对于Update、Insert和Delete语句,返回值为该命令所影响的行数。

对于所有其他类型的语句,返回值为-1。

Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下:

(1)创建数据库连接。

(2)创建Command对象,并指定一个SQL Insert、Update、Delete查询或存储过程。

(3)把Command对象依附到数据库连接上。

(4)调用ExecuteNonQuery方法。

(5)关闭连接。

下面依次看一看更新、添加和删除操作。

更新记录

下面的代码显示了一个简单的数据库更新操作,其作用是修改学号为“20013150“的学生信息:

string updateQuery="Update studentInfo set sName='小李'"+"Where ID='200131500145'";//新建连接

SqlConnection conn=newSqlConnection();

conn.Connectionstring=connectionString;//新建命令对象

SqlCommand cmd=newSqlCommand(updateQuery,conn);//调用命令对象的ExecuteNonQuery方法

conn.Open();int RecordsAffected=cmd. ExecuteNonQuery();

conn.Close();

代码本身非常简单。

但需要注意的是ExecuteNonQuery方法的返回值,这个方法返回命令影响的记录数量。

例如,如果命令是SQL UPDATE语句,则将返回被更新记录的数量。

相似的,当执行INSERT命令时返回插入到数据库的记录的数量。

如果期望命令更新记录,但是ExecuteNonQuery方法返回的值为0,则说明更新操作失败了。

(1)字符串拼接方式

也许读者已经注意到了在上面的代码中updateQuery是在程序中定义的,其操作固定在了程序中,用户无法和应用程序交互,

而在实际中命令应该根据用户输入的信息进行处理,比如用户在文本框中输入了新的用户信息以后单击更新,

然后程序将用户输入的数据更新到数据库。

要达到这个目的,就必须依据用户输入的数据来构造命令。构造命令可以有多种形式。

假设现在已经将用户输入的数据保存到了变量中:

String userName="小李";

String userId="200131500145";

此时userName和user id变量分别保存了学生姓名和学号,命名可以通过如下拼接命令字符串的形式构造:

string updateQuery="Update student Set sName=' "+username+" ' "+"Where ID=' "+user id+" ' "

这种拼接字符串构造命令的方式是最直接最简单的,但也是最不安全的。

可以采用参数化来实现相同的功能。

(2)参数化方式

SQL Server.NET数据提供程序和OLE DB.NET数据提供程序在指定参数时区别非常大,下面分别介绍。

①在SQL Server .NET数据提供程序中指定参数

SQL Server .NET数据提供程序支持指定的参数。

当命令文本在指定具体命令时,必须指出哪一部分是在运行时进行设置的,也就是必须指出哪部分是参数。

那些可变的部分即参数,它们都必须有一个@前缀。

Update student set sName=@userName where ID=@userid

这个命令中,@userName和@userid为参数,它们的值在运行时是可变的。

当命令中带参数时,构造Command对象的方法和前面的并没有任何不同:

string updateQuery="Update student Set sName=@username"+"Where ID=@userid" ;

SqlConnection conn=new SqlConnection(connectionString);

SqlCommand cmd=new SqlCommand(updateQuery, conn);

现在就有了包含参数的Command对象。

目前需要做的就是为命令中的每一个参数创建一个Parameter对象。

SqlCommand类提供了一个Parameters集合属性,用以为命令保存所有的参数。

通过调用Parameters集合的Add方法,在集合中添加一个新的参数。

crud. Parameters.Add (" @userName", userName);

cmd. Parameters.Add("@userid", userid);

上面Add方法中的第一个参数为命令中的参数名,后面的userName则是用于定义的变量,保存了用户输入的信息。

除此之外,可以用其他方法创建Parameter对象,然后添加到集合中。

SqlParameter paramUserName= new SqlParameter("@userName",SqlDbType.NVarChar,50);

paramUserName.Value=userName;

cmd. Parameters.Add(paramUserName) ;

上面的代码

首先新建了一个SqlParameter对象,命名为paramUserName,该对象对应于命令中的@userName参数,在SqlParameter的构造函数中为参数指定了类型为SqlDbType.NVarChar,长度为50。

接着为paramUserName指定了Value属性,表示在运行时将用这个值代替命令中的@userName。

最后是调用Add方法将参数添加到命令的参数集合中,这一步很容易被初学者忽略,要格外注意。

带参数的命令设置好以后可以和往常一样执行ExecuteNonQuery方法,这并没有任何不同。

除了直接使用SQL语句作为命令以外,还可以使用存储过程作为命令内容。

为了ADO.NET应用程序中执行存储过程,需要把存储过程的名称赋给命令文本,同时将命令的CommandType属性设置为存储过程。

如果存储过程返回值,或者有一些参数,还必须创建参数,并把创建的参数添加到命令的Parameters集合中。

在数据库Student添加如下名为UpdateStudentInfo的存储过程,

代码如下:

CREATE PROCEDUREUpdateStudentInfo

(@userName nvarchar(20),@user id nvarchar(20);

)AS

UpdatestudentInfoSet sName=@userName Where ID=@useridGO

为了执行该存储过程,必须创建一个Command对象并将存储过程的名称传入它的构造函数。

SqlConnection

conn=new SqlConnection(connectionString);

SqlCommand

cmd=new SqlCommand("UpdateStudentInfo", conn);

接下来要把命令的CommandType属性设置为StoredProcedure。

cmd.CommandType=CommandType.StoredProcedure;

后续步骤和参数化命令是相同的,先设置参数然后执行对应命令。

c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法相关推荐

  1. c# mysql executenonquery_C#与数据库访问技术之ExecuteNonQuery方法

    ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.Insert和Delete语句,返回值为 ...

  2. .NET/C#大型项目研发必备(7)--DataAccess数据库访问技术

    前言:本系列文章适合有初/中级.NET知识的同学阅读. (1)本系列文章,旨在讲述研发一个中大型项目所需要了解的一系列"基本构件",并提供这些"基本构件"的[最 ...

  3. ODBC OLEDB ADO等数据库访问技术

    花了点时间理了一下数据库访问技术相关的东西,一般地,一个数据库产品的发布后,相应地,会为开发者提供一套访问改数据库的接口,比如MySql提供的C API,可以通过这些数据库产品本身的API进行数据库操 ...

  4. VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程.

    VBNET学习笔记---MS VBnet数据库访问技术,概念,介绍,发展历程. 2013-02-20 1.数据库访问技术 a.JET与DAO JET(Joint Engine Technology)数 ...

  5. c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...

    基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...

  6. 数据库访问技术的总结 一

    以下几篇对数据库的访问技术,做一个完整的梳理,已备后来需要时查阅. 一.嵌入式SQL的处理过程 将书写的SQL语句嵌入到主语言中,主语言一般如c.c++.java等.对于这种嵌入式语言(ESQL),R ...

  7. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用spring+MyBatis+MySQL搭建数据库框架.如果数据量很大,一个mysql库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  8. QT数据库访问技术简介

    目录 背景介绍 功能对比 QT中数据库操作常用类介绍 用法实例 数据准备 创建实体类 创建数据库访问类 个人总结 关于如何获取数据库执行过程中的错误以及判断SQL语句执行是否成功执行 关于参数化SQL ...

  9. jdbc mysql ppt,JAVAWEB数据库访问ppt课件.ppt-资源下载人人文库网

    JAVA WEB数据库访问ppt课件.ppt 数据库访问 夏汛 泸职院信息工程系 学习目标 能够使用JDBC访问数据库 JDBC驱动程序的类型 JDBC ODBC桥 访问access 只能通过JDBC ...

最新文章

  1. dataframe按行按列选择方法
  2. 安装ie浏览器的js脚本调试工具
  3. ggplot2箱式图两两比较_R绘图 第四篇:绘制箱图(ggplot2)
  4. 解决问题:无法对 System程序集 添加Fakes程序集
  5. php秒数怎么转换为时间格式,php将秒数转换为时间(年、月、日、小时…)
  6. python中文转拼音不用第三方库_又一个奇葩要求,Python是如何将“中文”转“拼音”的?...
  7. android支付宝余额怎么做,android实现类似于支付宝余额快速闪动的效果
  8. hiho1095(二分)
  9. 一个bootstrap.css的使用案例
  10. paip..net VS2010提示当前上下文中不存在名称的解决
  11. qtp11安装及入门
  12. c语言运行太短怎么毡筒,C语言程序设计 最简单的C程序设计.ppt
  13. Sator提供其Orca流动性池的六周,增长更新一览
  14. 软件企业认定条件(双软企业认定条件2023)
  15. Unsupervised Cross-Dataset Transfer Learning for Person Re-identification阅读总结
  16. android音乐播放器之歌词下载、处理、开始、同步
  17. Ubuntu安装eclipse
  18. 【mcuclub】超声波测距模块HC-SR04
  19. 【PyTorch】PyTorch搭建神经网络处理图片分类的完整代码
  20. QCM6490启动流程梳理

热门文章

  1. 在linux解压文件夹,在linux 下解压 rar 文件
  2. mysql 取消缺省值_MySQL中各参数的默认值你认为有哪些是不合理的?
  3. (译)假如猫从世界上消失了
  4. 华为手机nfs是什么意思_如何配置NFS?
  5. CAD文件怎么转换成图片?教你简单方法
  6. 【机器学习】什么是特征缩放?如何去实现特征缩放?
  7. alibaba.jym.item.external.goods.status.batch.query( 交易猫外部商家商品状态批量查询接口 )
  8. 电脑怎么改图片格式?图片转格式怎么转?
  9. MyEclipse Some code changes cannot be hot swapped into a running virtual machine错误
  10. 基于单片机的嵌入式系统的典型的应用程序框架设计