简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作
连接数据库代码:
private SqlConnection con = null;
public void OpenConnection(string connectionString)
{
con = new SqlConnection();
con.ConnectionString = connectionString;
con.Open();
}
public void CloseConnection()
{
con.Close();
}
添加代码(增)
public void InsertPerson(string name, int age)
{
string sql = string.Format("insert into Person(Name,Age) values ('{0}',{1})", name, age);
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
cmd.ExecuteNonQuery();
}
}
这个方法在语法上没有问题,但你可以提供一个重载版本,允许调用者传递一个表示行数据的强类型类。
public void InsertPerson(Person p)
{
string sql = string.Format("insert into Person(Name,Age) values ('{0}',{1})", p.Name, p.Age);
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
cmd.ExecuteNonQuery();
}
}
删除代码(删)
public void DeletePerson(int id)
{
string sql = string.Format("Delete form Person where id={0}",id);
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
try
{
cmd.ExecuteNonQuery();
}
catch (Exception)
{ Console.WriteLine("删除失败");
}
}
}
修改代码(改)
public void UpdatePerson(int id,string name)
{
string sql = string.Format("Update Person set name={0} where id={1}", name,id);
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
try
{
cmd.ExecuteNonQuery();
}
catch (Exception)
{ Console.WriteLine("更新失败");
}
}
}
查询代码(查)
public List<Person> GetAllPersonList()
{
List<Person> list = new List<Person>();
string sql = string.Format("select * from Person");
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
SqlDataReader sr = cmd.ExecuteReader();
while (sr.Read())
{
list.Add(new Person {
Age=(int)sr["Age"],
Name=(string)sr["Name"]
});
}
}
return list;
}
还有另一种返回System.Data.DataTable对象的方法,它实际上是ADO.NET非连接层的一部分
public DataTable GetAllPersonDataTable()
{
DataTable dr = new DataTable();
string sql = string.Format("select * from Person");
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
SqlDataReader sr = cmd.ExecuteReader();
dr.Load(sr);
sr.Close();
}
return dr;
}
使用参数化的命令对象
不使用参数化的命令对象每一个 SQL 查询都是用字符串字面量硬编码的。参教化查询能像对象那样处理 SQL 参数,而不是像一堆文本一样。而且.参数化查询执行起来比纯文本的 SQL 语句快多了,它只需要解析一次(而不是像 SQL 语句那样每次被分配到CommandText 属性都要解析)。同样,参数化查询也能消除 SQL 注人攻击(非常著名的数据访问安全问题)的隐患
为支持参数化查询, ADO· NET命令对象使用一个集合来保存参数对象。这个集合默认是空的.可以添加任意多的参数对象并映射到SQL语句中的占位符参数。如果需要把 SQL 查询中的参数和命令对象参数集合中某一个成员关联的话,只需要在SQL文本参数前面加@符号(微软SQL Server是这样的,不是所有的DBMS都支持@符号)
| DbParameter 类型的主要成员 | |
| DbType | 从数据源获取或设置原始数据类型,以 CLR 数据类型呈现 |
| Direction | 获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是返回值参数 |
| IsNullable | 获取或设置一个值,该值指示参数是否接受空值 |
| ParameterName | 获取或设置DbParameter的名称 |
| Size | 获取或设置列中数据的最大尺寸 (只对文本数据有用) |
| Value | 获取或设置该参数的值 |
代码如下
public void InsertPersonPara(Person p)
{
string sql = string.Format("insert into Person(Name,Age) values (@Name,@Age)");
using (SqlCommand cmd = new SqlCommand(sql, this.con))
{
SqlParameter param = new SqlParameter();
param.ParameterName = "@Name";
param.Value = p.Name;
param.SqlDbType = SqlDbType.Char;
cmd.Parameters.Add(param); param=new SqlParameter();
param.ParameterName = "@Age";
param.Value = p.Age;
param.SqlDbType = SqlDbType.Int;
cmd.Parameters.Add(param);
}
同样,注意SQL查询包含2个嵌入的占位符,每一个都以@为前缀。使用 SqlParamter 类型,我们就可以使用 param.ParameterName属性以强类型格式来映射每一个占位符并指定各种细节(值、数据类型和大小等)。参数对象都准备好之后.就可以通过调用 Add()方法加到命令对象的集合中。
执行存储过程
存储过程是存储在数据库内的一段已命名的SQL代码,你可以构造存储过程,返回一组行或标量数据类型,或进行其他有意义的处理(如插入、更新、删除),也可以接受一些可选参数。其实它就像是一个存储在数据库内的功能模块,和那些二进制数据对象有明显区别;
public string LookUpPetName(int id)
{
string petName = string.Empty;
using (SqlCommand cmd=new SqlCommand("GetPetName",this.con))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param.ParameterName = "@Id";
param.Value = id;
param.SqlDbType = SqlDbType.Int;
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param); param = new SqlParameter();
param.ParameterName = "@Name";
param.SqlDbType = SqlDbType.Char;
param.Size = ;
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); petName = (string)cmd.Parameters["@Name"].Value;
}
return petName;
}
简述ADO中如何使用参数化的命令对象以及增删改查,存储过程的操作的更多相关文章
- AngularJS中使用$http对MongoLab数据表进行增删改查
本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...
- MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb
MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关 ...
- 48.Python中ORM模型实现mysql数据库基本的增删改查操作
首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...
- 在C#的控制台应用中使用Dapper链接MySQL并执行一些增删改查
一.首先先创建一个C#的控制台应用 二.然后添加上必要的命名空间 using System;using System.Collections.Generic;using MySql.Data.MySq ...
- django中的forms组件(权限信息校验,增删改查)
1.用处 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确,则保留上次输入的内容 5.自动创建input标签并可以设置样式 6.基于form ...
- 2018.8.1 python中字典的增删改查及其它操作
一.字典的简单介绍 1.dict 用{}来表示 键值对数据 {key:value} 唯一性 2.键都必须是可哈希,不可变的数据类型就可以当做字典中的键 值没有任何限制 ...
- 关于android中数据库的创建以及基础的增删改查的相应操作
这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行. 相应的知识点如下: 对于数据库中的一些常识.SQLite 没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使 ...
- IDEA中通过工具类实现对数据库的增删改查
package com.hu.dao; import com.hu.entity.Student; import java.util.List;import java.util.Map; public ...
- MongoDB入门 常用命令以及增删改查的简单操作
1,运行MongoDB服务mongod --dbpath=/usr/local/developmentTool/mongo/data/db/然后启动客户端mongo2,sudo service mon ...
随机推荐
- 关于throw、throws、try--catch的问题
首先回顾概念 throws表示出现异常的一种可能性,并不一定会发生这些异常 throw则是抛出了异常,执行throw则一定抛出了某种异常 try--catch try语句用大括号{}指定了一段代码,该 ...
- (转载)CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法
目录 一.BFC与IFC 1.1.BFC与IFC概要 1.2.如何产生BFC 1.3.BFC的作用与特点 二.定位 2.2.relative 2.3.absolute 2.4.fixed 2.5.z- ...
- python 之 初识模块
什么是模块 什么是模块 一个.py文件 就是一个模块 我们使用import加载的模块分为4个通用类别 1.py文件 2.包好一组模块的包(带__init__.py文件的文件夹) 3.内置模块 4.已被 ...
- 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线
缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...
- Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
今日的验证码之旅 今天你要学习的验证码采用通过第三方AI平台开放的OCR接口实现,OCR文字识别技术目前已经比较成熟了,而且第三方比较多,今天采用的是百度的. 注册百度AI平台 官方网址:http:/ ...
- html5中的indexDB
1.关系型数据库和非关系型数据库 一致性: 事务完成时,必须让所有的数据具有一致的状态,例如要写入100个数据,前99个成功了,结果第100个不合法,此时事务会回滚到最初状态.这样保证事务结束和开始时 ...
- VulDeePecker:基于深度学习的脆弱性检测系统
最近的两款软件,VUDDY和VulPecker,假阴性率高而假阳性率低,用于检测由代码克隆引发的漏洞.而如果用于非代码克隆引起的漏洞则会出现高误报率. 本文使用深度学习处理程序中的代码片段,不应由专家 ...
- Java并发——CAS
什么是CAS? CAS是Compare And Swap的简称.在Java中有很多实现,比如compareAndSwapObject()方法,或者compareAndSwapInt()方法等.多用在包 ...
- Percona XtraBackup 8.0, 安装与测试
Percona XtraBackup 8.0 是Percona XtraBackup新推出了一个针对MySQL8.0的版本,主要是MySQL8.0在Redo 和 数据库字典方面有了新的改进. Xtra ...