简述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 ...
随机推荐
- 实验吧 ---- 隐写术之so beautiful so white
因为好久没有写博客,所以今天本宝宝要弥补这个过错,一下子更新许多文章,希望各位小伙伴能够原谅,以后我会加倍努力的! 这一次主要都是实验吧里面的 关于隐写术方面的知识,后续我会上传一些解密工具,希望能够 ...
- 8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录
到目前为止大家应该对镜像和容器有了一个大概认知,而且也用了docker进行了一个简单化的部署,但仔细一看问题还有很多,所以这篇我们继续完善. 一:如何让外网访问到容器内应用 我们知道容器内拥有自己的子 ...
- 【转】委托的N种写法,你喜欢哪种?
一.委托调用方式 1. 最原始版本: delegate string PlusStringHandle(string x, string y); class Program { static void ...
- SpringBoot进阶教程(二十八)整合Redis事物
Redis默认情况下,事务支持被禁用,必须通过设置setEnableTransactionSupport(true)为使用中的每个redistplate显式启用.这样做会强制将当前重新连接绑定到触发m ...
- Hibernate工具类_抽取重复核心代码
问题:在Hibernate中每次执行一次操作总是需要加载核心配置文件,获取连接池等等都是重复动作,所以抽取出来 解决: package com.xxx.utils; /** *Hibernate的工具 ...
- Jenkins忘记admin密码处理方法
1.先找到enkins/config.xml文件,并备份. 此文件位于Jenkins系统设置的主目录,根据自己的配置情况而定.我的位置如下 /data/temp/jenkins/config.xml2 ...
- go.js remove 特定part
我想删除一个实际上是背景的部分. 假设这是我添加part的方式 myDiagram.add( scope.gj(go.Part,//此Part未绑定到任何模型数据 { layerName:“Backg ...
- a标签伪类选择器以及伪元素:hover的案例
1.通过我们的观察发现a标签存在一定的状态1.1默认状态, 从未被访问过1.2被访问过的状态1.3鼠标长按状态1.4鼠标悬停在a标签上状态 2.什么是a标签的伪类选择器?a标签的伪类选择器是专门用来修 ...
- 关于linux上postgresql的一些理解
刚开始接触postgresql,安装后就有一个默认用户postgres,而且在启动postgresql后只能通过切换到linux的postgres用户才能登录数据库进行操作,和Mysql的登录认证居然 ...
- Accesss数据库的DBhelper类(带分页)
首先配置web.config,使配置文件连接access数据库: <connectionStrings> <add name="DBConnection" con ...