C# 中用 Sqlparameter 的两种用法
作者:todo_something 发布时间:2022-11-19 03:52:52
标签:c#,Sqlparameter,用法
新建一个表:
create table abc
(
id int IDENTITY(1,1) NOT NULL,
name nvarchar(100) ,
sex nvarchar(10)
)
insert into abc values(‘asf','男')
insert into abc values(‘ai','女')
创建表格完成。
新建一个存储过程:
create procedure selbyid
(
@id int,
@thename nvarchar(100) output
)
as
select @thename= name from abc where id=@id
在执行的过程中可以用sqlparameter 的几种格式来调用存储过程:
第一种是:
public string connString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//存储链接字符串,方便资源复用。
public SqlConnection getcon( )
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connString;
return conn;
}
private void btnsqlparauseing_Click(object sender, EventArgs e)
{
SqlConnection con = getcon();
con.Open();
string sqlstr = "insert into abc values(@name,@sex)"; //免除sql注入攻击
SqlCommand cmd = new SqlCommand( );
cmd.Connection = con;
cmd.CommandText = sqlstr;
SqlParameter para = new SqlParameter(); //声明参数
para= new SqlParameter("@name", SqlDbType.NVarChar,100);//生成一个名字为@Id的参数,必须以@开头表示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同,但是不能超出数据库字段大小的范围,否则报错。
para.Value = txtname.Text.ToString().Trim(); //这个是输入参数,所以可以赋值。
cmd.Parameters.Add(para); //参数增加到cmd中。
para = new SqlParameter("@sex", SqlDbType.NVarChar, 10);
para.Value = txtsex.Text.ToString().Trim();
cmd.Parameters.Add(para);
int i =cmd.ExecuteNonQuery(); //执行sql语句,并且返回影响的行数。
MessageBox.Show(i.ToString() + "命令完成行受影响插入成功", "提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
con.Close();
}
2.第二种是调用sqlparameter几种方式来调用存储过程:
1.
private void btnshuchu_Click(object sender, EventArgs e)
{
SqlConnection con = getcon();
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "selbyid"; //存储过程的名称
cmd.CommandType = CommandType.StoredProcedure; //说明是存储过程
SqlParameter para = new SqlParameter(); //声明sqlparameter参数
para = new SqlParameter("@id", SqlDbType.Int); //这个参数是输入参数
para.Value = int.Parse(txtid.Text.ToString().Trim()); //因为是输入参数所以可以赋值
cmd.Parameters.Add(para); //加入cmd中
para=new SqlParameter("@thename",SqlDbType.NVarChar,100);//参数的大小可以小于数据库的参数规定值,但不能够大于数据库的参数大小。
cmd.Parameters.Add(para); //和下面一句不可掉乱,先增加再指明它是输出参数来的。
cmd.Parameters["@thename"].Direction = ParameterDirection.Output; //增加后,用output说明是输出参数。
int i=cmd.ExecuteNonQuery();
string name = cmd.Parameters["@thename"].Value.ToString(); //经过执行,存储过程返回了输出参数。
MessageBox.Show("命令完成 " + name + "是所查记录", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
}
套路就是: 输出参数先声明,再赋值,再加入cmd的参数中,最后用cmd.ExecuteNonQuery()执行。
2.用AddWithValue:
private void btnothers_Click(object sender, EventArgs e)
{
SqlConnection con = getcon();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "selbyid";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter para = new SqlParameter();
cmd.Parameters.AddWithValue("@id", Convert.ToInt32(txtid.Text.Trim()));//输入参数可以用addWithValue来格式化参数,但输出参数只能用Add
cmd.Parameters.Add("@thename", SqlDbType.NVarChar,100).Direction = ParameterDirection.Output; //和下面一句不可顺序掉乱,否则会报错,先加入cmd中再指明它是输出参数来的。
con.Open();
int i = cmd.ExecuteNonQuery();
string name = cmd.Parameters["@thename"].Value.ToString(); //输出参数返回一个数值。
MessageBox.Show("命令完成 " + name + "是所查记录", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
}
3.用参数数组实现调用输入和输出参数的存储过程:
private void btnshuzu_Click(object sender, EventArgs e)
{
SqlConnection con = getcon();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "selbyid";
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] para = { new SqlParameter("@id", SqlDbType.Int)};
para[0].Value = Convert.ToInt32(txtid.Text.ToString().Trim());
cmd.Parameters.AddRange(para); //输入参数和输出参数分别加入到cmd.Parameter中。
cmd.Parameters.Add("@thename",SqlDbType.NVarChar,100).Direction = ParameterDirection.Output; //和下面一句不可掉乱,先增加再指明它是输出参数来的。
con.Open();
int i = cmd.ExecuteNonQuery();
string name = cmd.Parameters["@thename"].Value.ToString();
MessageBox.Show("命令完成 " + name + "是所查记录", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();
}
总结
以上所述是小编给大家介绍的C# 中用 Sqlparameter 的两种用法网站的支持!
来源:http://www.cnblogs.com/simple-article/p/9574506.html
0
投稿
猜你喜欢
- 本文实例讲述了JAVA设计模式之备忘录模式。分享给大家供大家参考,具体如下:备忘录模式:又叫做快照模式,指在不破坏封装性的前提下,获取到一个
- 前言dynamic-tp是一个轻量级的动态线程池插件,它是一个基于配置中心的动态线程池,线程池的参数可以通过配置中心配置进行动态的修改,在配
- Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式什么是Java线程同步
- @Order控制配置类/AOP/方法/字段的加载顺序1.AOP加载顺序 @Component &nbs
- 功能描述1、创建扑克牌。包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王。2、创建两个玩家。包括玩家
- 在项目迁移到Spring Boot之后,发生内存使用量过高的问题。本文介绍了整个排查过程以及使用到的工具,也非常适用于其他堆外内存排查。背景
- 用java实现简易外卖订餐系统,供大家参考,具体内容如下一、使用技术javaSE二、实现功能外卖订餐系统具体要求如下:使用选择结构,循环结构
- 引言内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑。不过世界上不存在
- Java 本身就自带 JS 引擎,自从 Java 1.6 开始就支持了,愈来愈好。我对 js 比较熟悉,因此有个大胆的想法,为什么不用自带
- 一. spring配置文件:application.xml<?xml version="1.0" encoding
- (注意:本文基于JDK1.8)前言增删改查,修改元素,Vector提供了3个方法,包括迭代器中的一个,不过本文只分析Vector自身的两个修
- Springboot对配置文件的敏感信息加密前言最近公司对软件的安全问题比较在意,要求对配置文件中的敏感信息如数据库密码等进行加密。但是Sp
- 单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源代码例子:public class SingleThread {int num
- 因为在Action的execute方法声明时就抛出了Exception异常,所以我们无需再execute方法中捕捉异常,仅需在struts.
- 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进
- Spring中提供了很多PostProcessor供开发者进行拓展,例如:BeanPostProcessor、BeanFactoryPost
- 前提:微信公众平台:注册微信认证的公众号也就是服务号 ,拥有跟高级权限的微信接口。(注册服务号需要一些企业信息,需自己或者公司解决)注: 2
- 引言从本篇文章开始,我们将介绍 Java AQS 的实现方式,本文先介绍 AQS 的内部数据是如何组织的,后面的文章中再分别介绍 AQS 的
- java和javascript长得是如此地相像,那么它们是一回事儿吗?现在让我来揭晓答案吧!JavaScript 是一种嵌入式脚本文件,直接
- /*最小树形图图模版-朱刘算法模版说明:点标号必须0-(N-1) 必须去除到自身的点(到自身的边的边权赋无限大)*/