C#函数与SQL储存过程
一点点小认识作为memo,求指正。
C#的函数与SQL的储存过程有很多的相似性, 它们都是一段封闭的代码块,来提高代码的重用性,虽然现在复制粘贴很方便,但是我们在写多个函数的时候频繁的复制粘贴相同的内容会影响程序大小,那我在运 用相同运算的时候我们就要用函数或者储存过程,他们有着同样的目的,思路和出发点,但是很重要的一点是掌握他们的格式,
大致了分为四类:
C#函数写在 class大括号内,Main函数大括号外 | SQL储存过程写在指定数据库文件——可编程性——储存过程
|
定义函数 public/private/等等 | 创建一个函数: Create @名称 数据类型
|
例:C#无返回值,无输入输出参数函数 | SQL储存过程不带参数,不返回
class hanshu | Create proc student
{ | as
static void hehe() | select * from student
{ | go
Console.WriteLine("C#无返回值,无输入输出参数函数") ; | exec student --执行student存储过程,打印出student表,这两个student不同
} | 一个是student表,一个是student储存过程
static void Main(string [] args) |
{ |
hehe(); //输出 |
} |
} |
-----------------------------------------------------------------我是华丽的分割线------------------------------------------------------------------
带参数不返回
class hanshu | Create proc adt
{ | @a int,
public void hehe(string a, string b) | @b int,
{ | @result int output
Console.WriteLine(a); | as
Console.WriteLine(b); | set @result = @a +@b
} | go
static void Main (string [] args) | declare @anwer int
{ ,,@answer output
hanshu outline = new hanshu(); | select @answer
outline.hehe ("睡你麻痹","起来嗨"); |
|
Console.ReadLine(); |
} |
} |
----------------------------------------------------------------- 我是华丽的分割线 ------------------------------------------------------------------
不带参数带返回值
class hanshu | Create proc returncount
{ | as
public string hehe() | declare @a int
{ | select @a=count(*) from student
string s = "呵呵"; | return @a
return s; | go
} | declare @a int
static void Main(string[] args) | exec @a=returncount
{ | print @a
hanshu outline = new hanshu(); |
string s = outline.hehe(); //这里两个s不一样 | --这里的两个@a也是不一样的
Console.WriteLine(s); |
Console.ReadLine(); |
} |
} |
----------------------------------------------------------------- 我是华丽的分割线 ------------------------------------------------------------------
当然了以上3种情况我们用的不是非常多,毕竟一个成熟完整的函数或储存过程需要有输入参数和数出参数的,下面我们来简单地阐述下他们的格式
C# | SQL
class program | Create proc sss
{ | @a int,
public int hanshu (int a, int b,........int n, out int c) | @b int
//public 引导了一个叫hanshu的函数,它有返回值且返回值是 | as
整数,后括号里面写输入参数,以 , 隔开,out 后是数出参数 | 储存过程内容
{ | return
函数体 | go
return ; //返还一个int类型值给hanshu | exec--返回值=存储过程名 参数1,参数2,.......参数N --执行
} | 例:输入一个整数,比10小数出1,比10大100小数出2
static void Main (string [] args) //在主函数里调用 |其他情况输出-1
{ | create proc jugg
program hs= new program(); //在program类中命名 | @a int
一个叫hs的执行体并初始化; | as
hs.hanshu();//让hs函数体执行hanshu运作 if @a>=0 and @a<10
} | begin
} | return 1
例:写一个函数,要求输入一个数组比对出最大值,最小值 | end
并降序或升序排列 | else if @a>=10 and @a<100
class Program | begin
{ | return 2
public int[] n(int[] n, out int a, out int b) | end
{ | else
a = 0; | begin
b = 0; | return -1
for (int i = 0; i < n.Length; i++) | end
{ | go
for (int j = i; j < n.Length - 1; j++) // j是两两比的次数; | declare @a int --阐述一int类型的@a 但@a跟上面不同
{ | exec @a=jugg 20 --执行@a储存过程 输入20
if (n[i]<n[j+1]) | select @a --打印出结果
{ |
int m = 0; |
m=n[i]; |
n[i] = n[j + 1]; |
n[j+ 1] = m; |
} |
} |
} |
a = n[0]; |
b = n[n.Length - 1]; |
return n; |
|
} |
static void Main(string[] args) |
{ |
int a, b; |
Console.WriteLine("请输入数组位数"); |
int x = Convert.ToInt32(Console.ReadLine()); |
int[]n=new int[x]; |
Console.WriteLine("请输入一个数组,我来输出最大值,最小值"); |
for (int i = 0; i < x; i++) |
{ |
Console.Write("第"+(i+1)+"个"); |
n[i] = Convert.ToInt32(Console.ReadLine()); |
} |
int[] n1 = new Program().n(n,out a,out b); |
for (int i = 0; i < x; i++) |
{ |
Console.WriteLine("数组降序排列为:" + n[i]); |
} |
Console.WriteLine("并且数组最大值是:"+a+"最小值是"+b); |
|
Console.ReadLine(); |
} |
} |
小结:函数和储存过程都是方便我们使用的运算体,要注意我们的输入参数和返回参数,类型,数量等。通过做题加深印象。
C#函数与SQL储存过程的更多相关文章
- sql储存过程in(多个参数)
一.用sql函数 首先要创建一个截取字符串的函数,新建一个查询,把下面代码复制进去执行. 函数SqlitIn的第一个参数是储存过程要in的字符串,第二个参数是分隔符 CREATE function S ...
- sql 储存过程的使用
--获取所有数据 根据自定义函数传人类型id返回类型名称 USE [Cloths] GO /****** Object: StoredProcedure [dbo].[Proc_all] Script ...
- 关于SQL储存过程中输出多行数据
declare @num1 int --为符合条件的总行数 select @num1=COUNT(1) from cardInfo where openDate between @ ...
- SQL储存过程
基本语法 创建存储过程 create procedure sp_name @[参数名] [类型],@[参数名] [类型] as begin ......... end 以上格式还可以简写成: crea ...
- mysql的函数与储存过程与pymysql的配合使用
现在mysql上定义一个函数,一个储存过程 函数: delimiter \\ CREATE FUNCTION f2 ( num2 INT, num1 INT ) RETURNS INT BEGIN D ...
- SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数
-- SQL SERVER 判断是否存在某个触发器.储存过程 -- 判断储存过程,如果存在则删除IF (EXISTS(SELECT * FROM sysobjects WHERE name='proc ...
- MySQL 储存过程-原理、语法、函数详细说明
Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命 ...
- 【转】oracle查询用户表,函数,储存过程,
◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所 ...
- SQL获取所有数据库名、表名、储存过程以及参数列表
SQL获取所有数据库名.表名.储存过程以及参数列表 1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogi ...
随机推荐
- 51nod 1070 Bash游戏 V4 (斐波那契博弈)
题目:传送门. 有一堆个数为n(n>=2)的石子,游戏双方轮流取石子,规则如下: 1)先手不能在第一次把所有的石子取完,至少取1颗: 2)之后每次可以取的石子数至少为1,至多为对手刚取的石子数的 ...
- 使用charles 抓取手机上的操作
Charles上的设置要截取iPhone上的网络请求,我们首先需要将Charles的代理功能打开.在Charles的菜单栏上选择“Proxy”->“Proxy Settings”,填入代理端口8 ...
- osg 纹理访问器
#include<osgViewer/Viewer> #include<osg/Node>#include<osg/Geode>#include<osg/Gr ...
- 带你熟悉CSS浮动
一.概念理解 浮动:顾名思义先浮后动,浮动的对象会先漂浮起来,离开自己原来的位置(也就是所谓的脱离文档流),后动的意思是,它的后面的元素会向它原来的位置动起来. 二.注意事项 1.当元素有浮动属性时, ...
- 关于Cookie和Session的优缺点
关于Cookie和Session的优缺点 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. Cookie的优缺点:优点:极高的扩展性和可用 ...
- MyISAM表的维护和恢复
本节将讨论如何使用myisamchk检查和修复MyISAM表. 同时,你可以用myisamchk来检查,修复和优化数据库表.下面将讲述如何执行这些操作并建立维护计划. 虽然使用myisamchk很安全 ...
- CSS3实现32种基本图形
CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出.直接用CSS3画出这些图形,要比贴图性能更好,体验更加,是一种非常好的网页美观方式. 这32种图形分别为圆形,椭圆形,三角形,倒三角形, ...
- Java集合源码学习(二)ArrayList分析
>>关于ArrayList ArrayList直接继承AbstractList,实现了List. RandomAccess.Cloneable.Serializable接口,为什么叫&qu ...
- 檢查RAC狀態
1.使用srvctl工具檢查RAC當前配置和狀態 $ srvctl config database -h Displays the configuration for the database. Us ...
- java 杂物间 (一) Mybatis
这里放置的是一些杂物,生人勿入. Token的一般parse 过程. @Test public void shouldDemonstrateGenericTokenReplacement() { Ge ...