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 ...
随机推荐
- js中setInterval与setTimeout用法
setTimeout 定义和用法: setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code,millisec) 参数: ...
- 【leetcode】Implement strStr() (easy)
Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...
- 【linux】linux下动态库so文件的一些认识
来源:http://mypyg.iteye.com/blog/845915 so其实就是shared object的意思.今天看了上面的博客,感觉好吃力.赶紧做个笔记记录一下.下面的内容大多都是连接中 ...
- 好用的php类库和方法
1, /** * 将一个平面的二维数组按照指定的字段转换为树状结构 * * 用法: * @code php * $rows = array( * array('id' => 1, 'value' ...
- 分页Bean终极封装
package org.guangsoft.vo; import java.util.List; public class Page { private Integer pageNum; privat ...
- 解决window删除文件时提示: 源文件名长度大于系统支持的长度
import java.io.File; /** */ public class DeleteFiles { public static void deleteFiles( File file ){ ...
- CountdownLatchTest
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java ...
- 避免产生僵尸进程的N种方法(zombie process)
http://blog.csdn.net/duyiwuer2009/article/details/7964795 认识僵尸进程 1.如果父进程先退出 子进程自动被 init 进程收养,不会产生僵尸进 ...
- asmlinkage
转自:http://www.cnblogs.com/china_blue/archive/2010/01/15/1648523.html 声明,仅为了便于自己记忆和查询,非原创,摘自:http://b ...
- vim: vs sp 调整窗口高度和宽度
转自:http://www.cnblogs.com/xuechao/archive/2011/03/29/1999292.html vim多窗口有时候需要调整默认的窗口宽度和高度,可以用如下命令配合使 ...