C# 中用 Sqlparameter 的两种用法

作者:无名 - C#教程 -

新建一个表:

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();
}

总结

以上所述是IT人知识库小编给大家介绍的C# 中用 Sqlparameter 的两种用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,IT人知识库小编会及时回复大家的。在此也非常感谢大家对网站的支持!

IT人知识库 原文地址:http://www.itpeo.net/12809/520528.html





C#怎么生成唯一订单号

本文实例为大家分享了C#生成唯一订单号的具体代码,供大家参考,具体内容如下 根据GUID+DateTime.Now.Ti... ...

rfedfre

C# 添加PDF页眉/页脚的示例代码

概述 页眉页脚是一篇完整、精致的文档的重要组成部分。在页眉页脚处,可以呈现的内容很多,如公司名称、页码、工作表名、日期... ...

微信小程序支付C#后端源码

本文实例为大家分享了微信小程序支付C#后端源码,供大家参考,具体内容如下 using System; using S... ...

rfedfre

C#利用VS中插件打包并发布winfrom程序

本文为大家分享了C#利用VS中插件打包并发布winfrom程序,供大家参考,具体内容如下 1.先在VS 的扩展更新中搜索... ...

C#实现金额转换成中文大写金额

本文实例为大家分享了C#金额转换成中文大写金额的具体代码,供大家参考,具体内容如下 /// <summary&... ...

rfedfre

C# WPF 父控件通过使用可视化树找到子控件的示例代码

在我们使用WPF设计前台界面时,经常会重写数据模板,或者把控件放到数据模板里。但是一旦将控件放到数据模板中,在后台就没有... ...

C#实现ini文件读写操作

本文实例为大家分享了C#语言实现ini文件读写操作的具体代码,供大家参考,具体内容如下 1、ini文件是什么? 见百度百... ...

rfedfre

C# 7.0中解构功能详解

本文为大家分享了C# 7.0中的解构功能,供大家参考,具体内容如下 解构元组   C#7.0新增了诸多功能,其中有一项是... ...

C#获取日期的星期名称实例代码

具体代码如下所示: private string GetWeekName(DayOfWeek week) {... ...

rfedfre

C#中字段、属性、只读、构造函数赋值、反射赋值的问题

C#中字段、属性和构造函数赋值的问题提出问题如下所述: 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动... ...

C#中sqlDataRead 的三种方式遍历读取各个字段数值的方法

数据库的查询分析器中写上如下代码: create table studentname ( id int prim... ...

c# WinForm 窗体之间传值的几种方式(小结)

前言 小编最近维护一个Winfrom窗体,是项目中CS端的主窗体,很多子窗体需要从主窗体获取值,同时子窗体还需要给主窗... ...

rfedfre

C# WPF 通过委托实现多窗口间的传值的方法

在使用WPF开发的时候就不免会遇到需要两个窗口间进行传值操作,当然多窗口间传值的方法有很多种,本文介绍的是使用委托实现多... ...

rfedfre

自定义WPF窗体形状的实战记录

介绍 你好WPF爱好者。 随着WPF等统一API语言的发明,丰富用户界面变得非常容易。 创建丰富的用户界面只是一个想法... ...

深入浅析c#静态多态性与动态多态性

C# 多态性 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的... ...

rfedfre

C#程序中类数量对程序启动的影响详解

前言 最近我在项目写了几万行代码,小伙伴担心会让程序启动速度变慢,所以本渣就来做测试。 本渣使用了代码创建器,创建了 1... ...

rfedfre

Unity色子的投掷和点数的获得详析

前言 前几天需要一个色子的投掷并且获得朝上点数的Unity脚本,在网上找了很多,都是一个模子刻出来的。 对于2018版的... ...

rfedfre

C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

正文  #方法一:使用string.Contains方法   string.Contains是大小写敏感的,如... ...

WPF中窗体最大化问题的解决方法

前言 在创建WPF应用的时候,你第一个看到的就是窗体类。它作为窗体的基础,提供标准的边框、工具条、最大化、最小化和关闭按... ...

rfedfre

WPF快速入门教程之绑定Binding

绑定(Binding)元素介绍 首先,盗用张图。这图形象的说明了Binding的机理。 此处主要介绍的绑定类是Sys... ...