连接数据库代码:

  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中如何使用参数化的命令对象以及增删改查,存储过程的操作的更多相关文章

  1. AngularJS中使用$http对MongoLab数据表进行增删改查

    本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...

  2. MongoDB学习-->命令行增删改查&JAVA驱动操作Mongodb

    MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关 ...

  3. 48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  4. 在C#的控制台应用中使用Dapper链接MySQL并执行一些增删改查

    一.首先先创建一个C#的控制台应用 二.然后添加上必要的命名空间 using System;using System.Collections.Generic;using MySql.Data.MySq ...

  5. django中的forms组件(权限信息校验,增删改查)

    1.用处 1.用户请求数据验证 2.自动生成错误信息 3.打包用户提交的正确信息 4.如果其中有一个错误了,其他的正确,则保留上次输入的内容 5.自动创建input标签并可以设置样式 6.基于form ...

  6. 2018.8.1 python中字典的增删改查及其它操作

    一.字典的简单介绍 1.dict 用{}来表示       键值对数据           {key:value} 唯一性 2.键都必须是可哈希,不可变的数据类型就可以当做字典中的键 值没有任何限制 ...

  7. 关于android中数据库的创建以及基础的增删改查的相应操作

    这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行. 相应的知识点如下: 对于数据库中的一些常识.SQLite 没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使 ...

  8. IDEA中通过工具类实现对数据库的增删改查

    package com.hu.dao; import com.hu.entity.Student; import java.util.List;import java.util.Map; public ...

  9. MongoDB入门 常用命令以及增删改查的简单操作

    1,运行MongoDB服务mongod --dbpath=/usr/local/developmentTool/mongo/data/db/然后启动客户端mongo2,sudo service mon ...

随机推荐

  1. 集群IPtables转发与防火墙

    子网集群通过接入公网的服务器Iptables转发上网 1. 对iptables进行初始化工作 清空filter表 iptables -F 清空nat表 iptables -t nat -F 默认禁止所 ...

  2. 【Android】自己动手做个扫雷游戏

    1. 游戏规则 扫雷是玩法极其简单的小游戏,点击玩家认为不存在雷的区域,标记出全部地雷所在的区域,即可获得胜利.当点击不包含雷的块的时候,可能它底下存在一个数,也可能是一个空白块.当点击中有数字的块时 ...

  3. knowledge, Experience & Creativity

    In a training session, the trainer asked the audience "knowledge is power, how many of you agre ...

  4. JPA中自定义的插入、更新、删除方法为什么要添加@Modifying注解和@Transactional注解?

    前几天,有个同事在使用JPA的自定义SQL方法时,程序一直报异常,捣鼓了半天也没能解决,咨询我的时候,我看了一眼他的程序,差不多是这个样子的: @Repository public interface ...

  5. 用C语言做一个横板过关类型的控制台游戏

    前言:本教程是写给刚学会C语言基本语法不久的新生们. 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发. 所以本教程希望可以给仍在学习C语言的新生们能提前感受到游 ...

  6. for in 和 for of 的区别

    1.for...in 循环:只能获得对象的键名,不能获得键值 for...of 循环:允许遍历获得键值 var arr = ['red', 'green', 'blue'] for(let item ...

  7. 目标检测之YOLO V2 V3

    YOLO V2 YOLO V2是在YOLO的基础上,融合了其他一些网络结构的特性(比如:Faster R-CNN的Anchor,GooLeNet的\(1\times1\)卷积核等),进行的升级.其目的 ...

  8. web scraper 抓取网页数据的几个常见问题

    如果你想抓取数据,又懒得写代码了,可以试试 web scraper 抓取数据. 相关文章: 最简单的数据抓取教程,人人都用得上 web scraper 进阶教程,人人都用得上 如果你在使用 web s ...

  9. Eureka服务配置与进阶

    1. Eureka服务配置与进阶 1.1. 主要配置 1.1.1. 服务端(eureka.server.*) enableSelfPreservation默认true,启用注册中心的自保护机制,Eur ...

  10. 《Jave并发编程的艺术》学习笔记(1-2章)

    Jave并发的艺术 并发编程的挑战 上下文切换 CPU通过时间片分配算法来循环执行任务,当前时间片执行完之后会切换到下一个任务.但是,切换会保存上一个任务的状态,一遍下次切换回这个任务时,可以再次加载 ...