简述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 ...
随机推荐
- 深入理解Java 栈数据结构
栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈 ...
- 迎元旦,庆surging 1.0发布
一位摄影程序员的独白 每个人都有爱好,都有释放压力的活动,而我也不例外,我除了每天上班,周末就会约一群好友去拍妹子,成家后,就改为拍虫子,一拍就到了30岁,到了30岁就感觉到了中年的压力,这时候停下手 ...
- JS的 try catch使用心得
try{ //正常执行 }catch(e/*你感觉会出错的 错误类型*/){ // 可能出现的意外 eg:用户自己操作失误 或者 函数少条件 不影响下面的函数执行 // 有时也会用在 比如 focus ...
- C# 通俗说 委托(和事件)
1.闲聊 编码一两年, 我走过了字段, 我跑过了类, 却翻不过方法.(不能灵活使用方法吧) (写这篇博客全程听将夜中<永夜>歌曲写完的,一气呵成,安利一下) 2.叙事 我们在编码中,经常捣 ...
- ajax异步请求302分析
1.前言 遇到这样一种情况,打开网页两个窗口a,b(都是已经登录授权的),在a页面中退出登录,然后在b页面执行增删改查,这个时候因为授权原因,b页面后端的请求肯定出现异常(对这个异常的处理,进行内部跳 ...
- FreeSql.DbContext 第二个版本介绍
FreeSql.DbContext 实现类似 EFCore 使用方法,跟踪对象状态,最终通过 SaveChanges 方法提交事务. 目前是第二个初版,已实现状态跟踪保存(导航属性的跟踪暂时不支持). ...
- 入门系列之使用Sysdig监视您的Ubuntu 16.04系统
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由乌鸦 发表于云+社区专栏 介绍 Sysdig是一个全面的开源系统活动监控,捕获和分析应用程序.它具有强大的过滤语言和可自定义的输出,以 ...
- @Controller和@RestController源码解析
2018年不知不觉已经走到了尾声,你还在为分不清@Controller和@Restcontroller而烦恼吗?这篇博文从源码层面分析这两个注解,值得一读. 首先贴一张源码的图,对比一下,左边是@Co ...
- OpenProject基础使用介绍
所有的活动都可以看做一个项目来管理.在企业中更是这样. 所以项目管理平台,对于任何一个高科技企业来讲都是必不可少的. OpenProject(以下简称OP)就是一个不错的项目管理平台, ...
- AI2(App Inventor 2)离线版服务器网络版
个人修改包括: 1.后台增加用户批量添加功能 https://gte.fsyz.net/node/1877 2.上传文件限制改为100M ,编译文件限制改为10M https ...