c# 数据存储过程
什么是存储过程?
用某百科的话来说就是一堆为了完成某一功能或者某些功能的SQL语句的集合,而数据库则会将这些存储过程的方法存储到数据库中去。
优点:
1.可重用并且效率高:存储过程经过一次编译后不需要再次进行编译,这就提高了效率,再过一次编译的存储过程可重复使用,无需在进行第二次编译。
2.减少网络流量:以前传输的往往是SQL语句,当使用存储过程后使用的是参数,只需要传递参数即可。
3.安全性:在SqlServer中,可以使用Grant进行权限的分配不同的权限,也可以使用Revoke进行收回,还可以进行Deny拒绝。
如何使用存储过程?
关于建立存储,当然是在已经有的数据库中建立。下面的是我建立的数据库和表。

打开“可编程性”可以看到“存储过程”,右键创建新的存储过程即可:
--调用数据库
use 数据库名称
go
create proc 存储过程名称
--字段
as
--关联
go

具体代码使用过程如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// 引入数据库管理控件
using System.Data;
using System.Data.SqlClient; namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
// SQL语句插入操作
/*
* // 多个参数操作
SqlConnection conn = new SqlConnection(); // 初始化一个SqlConnection()类
conn.ConnectionString = "server=服务器名称;database=pc_test;uid=账号;pwd=密码"; // 连接字符串,格式(注意间隔要使用分号(";")来做分割):"server=数据库名称(据说可以使用"."来表示本地数据库,没试过);database=数据库;uid=账号;pwd=密码"。注:如果使用的是"."进行登陆的话,可以将uid和pwd换成"integrated security=SSPI"即:"server=.;database=数据库名;integrated security=SSPI";
conn.Open(); // 打开数据库
string sql = "insert into student(name,age,sex) values(@tname,@tage,@tsex);"; // SQL命令
SqlCommand comm = new SqlCommand(sql, conn); // 初始化SqlCommand()类
SqlParameter[] pars =
{
new SqlParameter("@tname",SqlDbType.NChar,10),
new SqlParameter("@tage",SqlDbType.Int,10),
new SqlParameter("@tsex",SqlDbType.TinyInt,2)
};
pars[0].Value = "namejr1";
pars[1].Value = 12;
pars[2].Value = 1;
comm.CommandType = CommandType.Text; // 这个表明是SQL命令
comm.Parameters.AddRange(pars);
SqlDataAdapter sda = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
sda.Fill(ds, "student"); // 对这个表进行显示,具体显示方法下一个会给出来
conn.Close();*/
//
/*
* 单条SQL操作
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "server=NAMEJR-PC;database=pc_test;uid=sa;pwd=123456"; // 连接字符串,格式(注意间隔要使用分号(";")来做分割):"server=数据库名称(据说可以使用"."来表示本地数据库,没试过);database=数据库;uid=账号;pwd=密码"。注:如果使用的是"."进行登陆的话,可以将uid和pwd换成"integrated security=SSPI"即:"server=.;database=数据库名;integrated security=SSPI";
conn.Open(); // 打开数据库
string sql = "select name,age,sex from student where id=@Id;";
SqlCommand comm = new SqlCommand(sql, conn);
SqlParameter par = comm.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int, 10));
par.Value = 1;
comm.CommandType = CommandType.Text; // 这个表明是SQL命令
SqlDataAdapter sda = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
sda.Fill(ds, "student");
foreach(DataTable dt in ds.Tables)
{
foreach(DataRow dr in dt.Rows)
{
foreach(DataColumn dc in dt.Columns)
{
// dt.TableName:就是使用Fill()指定的表名。dc.ColumnName字段名,dr[dc]字段值
Console.WriteLine("{0}=>{1}=>{2}", dt.TableName, dc.ColumnName, dr[dc]);
}
}
}
conn.Close();
*/
//
/*
* 快捷显示
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "server=NAMEJR-PC;database=pc_test;uid=sa;pwd=123456";
conn.Open();
string sql = "execute TSelect 1";
SqlCommand comm = new SqlCommand(sql, conn);
SqlDataAdapter sda = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
sda.Fill(ds, "student");
// 显示同上
*/
}
}
}
Sqlserver中对存储过程的一些操作:
exec sp_databases -- 查看数据库
exec sp_tables -- 查看表
exec sp_columns 表名 -- 查看所填表名的列
exec sp_helpIndex 表名-- 查看对应表的索引
exec sp_helpConstraint 表名 -- 查看对应表的约束
exec sp_stored_procedures -- 查看全部的存储过程
exec sp_helptext 存储进程名 -- 查看对应的存储进程结构
此外还有sp_rename(修改表/列/索引的名称)、sp_renamedb(修改数据库名称)、sp_defaultdb(设置默认登录数据库)、sp_helpdb(获取帮助信息)
带输入输出函数的存储过程:
sqlserver查询记录命令:
use 数据库名
declare @CourtName nvarchar()
declare @totalRoomNum int
declare @NumHousesComple int
declare @NumHousesNotComple int
declare @HCTO int
declare @HCTON int
exec 存储过程名 ,,'2019-03-28',@CourtName output,@totalRoomNum output,@NumHousesComple output,@NumHousesNotComple output,@HCTO output,@HCTON output
print @CourtName
print @totalRoomNum
print @NumHousesComple
print @NumHousesNotComple
print @HCTO
print @HCTON
#region 执行带输入输出的存储过程
public static void IOSql(string proName, string Courtid, long _costtype, string _time, out string CourtName, out int totalRoomNum, out int NumHousesComple, out int NumHousesNotComple, out int HCTO, out int HCTON)
{
/*
SqlConnection conn = new SqlConnection("server=服务器地址;uid=账号;pwd=密码;database=数据库");
*/
// 连接数据库
using (SqlConnection conn = GetConnection())
{
conn.Open(); // 打开数据库
using(SqlCommand commd = conn.CreateCommand()){
commd.CommandType = CommandType.StoredProcedure; // 存储过程方式
commd.CommandText = proName; // 存储过程名称(可以是表名什么的)
// 构建数据类型
SqlParameter[] para=new SqlParameter[]{
new SqlParameter("@CourtId",SqlDbType.Int),
new SqlParameter("@CostType",SqlDbType.Int),
new SqlParameter("@time",SqlDbType.Date),
new SqlParameter("@CourtName",SqlDbType.NVarChar,), // 注意,使用nvarchar的时候记得写长度
new SqlParameter("@totalRoomNum",SqlDbType.Int),
new SqlParameter("@NumHousesComple",SqlDbType.Int),
new SqlParameter("@NumHousesNotComple",SqlDbType.Int),
new SqlParameter("@HCTO",SqlDbType.Int),
new SqlParameter("@HCTON",SqlDbType.Int)
};
para[].Value = Courtid;
para[].Value = _costtype;
para[].Value = _time.ToString();
para[].Direction = ParameterDirection.Output;
para[].Direction = ParameterDirection.Output;
para[].Direction = ParameterDirection.Output;
para[].Direction = ParameterDirection.Output;
para[].Direction = ParameterDirection.Output;
para[].Direction = ParameterDirection.Output;
commd.Parameters.AddRange(para);
commd.ExecuteNonQuery(); // 执行语句
// 单个数据查看
CourtName = Convert.ToString(commd.Parameters[].Value);
totalRoomNum = Convert.ToInt32(commd.Parameters[].Value);
NumHousesComple = Convert.ToInt32(commd.Parameters[].Value);
NumHousesNotComple = Convert.ToInt32(commd.Parameters[].Value);
HCTO = Convert.ToInt32(commd.Parameters[].Value);
HCTON = Convert.ToInt32(commd.Parameters[].Value);
}
conn.Close();
}
}
#endregion
AddBy 2020-2-24
存储函数的使用:
create function ControlLessHundred(@Num int)
returns int
as begin
declare @ReNumber int;
if(@Num>) begin
set @ReNumber=
end
else begin
set @ReNumber=@Num
end
return @ReNumber
end
查询方式:
对于无参数的存户函数在sqlserver中查询只需要:
exec ControlLessHundred() 对于有参数的查询
select ControlLessHundred() 关于在存储过程中的引用
ControlLessHundred() 如果存在'ControlLessHundred' 不是可以识别的 内置函数名称 的报错,那么请在前面加上dbo. 即:
select dbo.ControlLessHundred()
EndBy 2020-2-24
c# 数据存储过程的更多相关文章
- MySQL mysqldump 导入/导出 结构&数据&存储过程&函数&事件&触发器
———————————————-库操作———————————————-1.①导出一个库结构 mysqldump -d dbname -u root -p > xxx.sql ②导出多个库结构 m ...
- JDBC 学习笔记(二)—— 大数据+存储过程+批处理+事务管理
本文目录: 1.使用JDBC处理大数据 2.使用JDBC处理大文本 3.使用JDBC处理二进制数据 4.Oracle中大数据处理 5 ...
- MySQL往表里插入千条数据 存储过程
工作中遇到的问题,先记录一下,方便以后查看 存在两张表,user表和friend表 user表部分字段,如上图 friend表部分字段,如上图 往friend表插入千条数据,friend表中的user ...
- java—数据存储过程 (54)
存储过程:procedure:就是一段可执行程序.这个程序运行在数据中. Begin = { End = } If Else 也可以接收参数. 1 定义一个procedure: CREATE PROC ...
- mysql 生成时间序列数据 - 存储过程
由于时间自动转换为int值, 做一步转化,也可在调用时处理 use `test`; CREATE table test.test1 as SELECT state, id, `规格条码`, `色号条码 ...
- SQL 导出表数据存储过程
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- ...
- mysql 批量插入数据存储过程
create procedure pFastCreateNums (cnt int unsigned) begin declare s int unsigned default 1; truncate ...
- sql server 通用修改表数据存储过程
ALTER PROC [dbo].[UpdateTableData] ), ), ), ), ) AS BEGIN ) SET @sql ='UPDATE '+@TableName; --获取SqlS ...
- SQL server 数据存储过程
创建视图
随机推荐
- 图论++【洛谷p1744】特价采购商品&&【一本通1342】最短路径问题
(虽然题面不是很一样,但是其实是一个题qwq) [传送门] 算法标签: 利用Floyed的o(n3)算法: (讲白了就是暴算qwq) 从任意一条单边路径开始.所有两点之间的距离是边的权,或者无穷大,如 ...
- 『TensorFlow』第三弹_可视化框架介绍_悄悄问圣僧
添加记录节点 -> 汇总记录节点 -> run汇总节点 -> [书写器生成]书写入文件 [-> 刷新缓冲区] 可视化关键点: 注意, 1.with tf.name_scope( ...
- Python ORM框架之SQLAlchemy
前言: Django的ORM虽然强大,但是毕竟局限在Django,而SQLAlchemy是Python中的ORM框架: SQLAlchemy的作用是:类/对象--->SQL语句--->通过 ...
- Nginx的使用(三)把nginx和php-cgi.exe注册成windows服务
1.创建windows服务用到一个小工具WinSW:https://github.com/kohsuke/winsw/releases(下载 .exe 文件即可,根据系统选择,Win 10 选择 .N ...
- List集合1
一.List接口介绍 List继承自Collection接口,是单列集合的一个重要分支,习惯性的会将实现List接口的对象称为List集合 二.List接口3个特点 1.有序(有序不是顺序,有序指的是 ...
- ES6和ES5变量声明的区别(var let const)
// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...
- python 安装scrapy need vistual c++ 14.0 的正面解法
为什么一堆教程里面,都是侧面的. 因为需要你自己去正面刚 正题: 这个问题要的是 build tools 人(控制台)说的很清楚了, 给的链接不是直接解决问题的链接(我安装了 vs_redis.exe ...
- python私有属性和私有方法
私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...
- Codeforces Round #309 (Div. 1) A(组合数学)
题目:http://codeforces.com/contest/553/problem/A 题意:给你k个颜色的球,下面k行代表每个颜色的球有多少个,规定第i种颜色的球的最后一个在第i-1种颜色的球 ...
- Hadoop学习笔记01_Hadoop搭建
想往大数据方向转, 难度肯定是有的. 基础知识肯定是要有的,如果是熟悉JAVA开发的人,转向应该优势大. 像我这样的,只有Linux基础以及简单的PHP基础的人,转向难度很大.但是事在人为,努力学习多 ...