连接数据库代码:

  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. appium---【已解决】【Mac】如何查看java的安装路径及JAVA_HOME环境变量的配置

    报错截图:根据提示可以看出,JAVA_HOME的环境变量配置错误,需要重新配置. 1.查看Java版本 打开mac电脑,查看java版本,打开终端Terminal,通过命令查看java的版本 Luck ...

  2. Docker的简单实用

    一.docker的常用操作 二.其实用docker search images它就是去hub仓库里面查找:https://hub.docker.com/ 对容器的操作: 搜索镜像:[root@mast ...

  3. 一个C#程序员学习微信小程序路由的笔记

    路由大家应该都知道,在微信小程序也是有的,毕竟它是单页面应用程序.在WeChat中有五种跳转方式,分别是wx.switchTab.wx.reLaunch.wx.redirectTo.wx.naviga ...

  4. 最详细的div边距合并的问题和解决方法

    对于前端来说写页面是最基础的东西了,但是想不到还是有人不理解边距合并的问题,昨天有网友问我为什么设置的margin不是我设置的实际效果? 好吧,废话不多说,下面来说一下关于margin合并的问题. 解 ...

  5. SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表

    这段时间一直在敲rdl报表,在国内的不这么留在,在国外的话,还是挺流行的,国内的话,这方面的资料很少很少,也踏过不少坑 先从SSRS了解起,SSRS全称 SQL Server Reporting Se ...

  6. 第一课《.net之--泛型》

    今天我来学习泛型,泛型是编程入门学习的基础类型,从.net诞生2.0开始就出现了泛型,今天我们开始学习泛型的语法和使用. 什么是泛型? 泛型(generic)是C#语言2.0和通用语言运行时(CLR) ...

  7. JQuery --- 第一期 (初识jQuery, JQuery核心函数和工具方法)

    个人学习笔记  初识jQuery 1.我的第一个JQuery <!DOCTYPE html> <html lang="en"> <head> & ...

  8. 文本输入框input text输入字母自动转大写

    现在需要把一个input输入框内的字母自动转变为大写. 查了下资料,目前收集到的方法有两种: 使用JavaScript,在input标签添加onkeyup方法,将字符转为大写. <input n ...

  9. 【error】Gradle sync failed: Unable to start the daemon process.【已解决】

    ---恢复内容开始--- 在克隆GIT项目后,Android Studio 报错: Gradle sync failed: Unable to start the daemon process. Th ...

  10. Spring之AOP详解

    文章大纲 一.AOP介绍二.Spring的AOP实战三.AOP常用标签四.项目源码及参考资料下载五.参考文章   一.AOP介绍 1. 什么是AOP 在软件业,AOP为Aspect Oriented ...