SQL Server中存储过程Stored Procedure创建及C#调用

存储过程就是已经编译好的、优化过的放在数据库服务器中的一些SQL语句;可供应用程序直接调用。使用存储过程有以下几个优点:

1、执行速度比普通的SQL语句快

2、便于集中控制

3、可以降低网络的通信量

4、保证数据库的安全性和完整性

5、灵活性

创建存储过程

可以采用Transact-SQL语句来创建存储过程Stored Procedured。在Microsoft SQL Server Management Studio中Databases->Database Name->Programmability->Stored Procedures右键选择Stored Procedure就生成了一个创建存储过程的模板,修改其中的内容再执行就创建了Stored Procedured。

下面我首先以创建对表中插入数据的存储过程来为例。比如我的原始表是如下语句所创建的:

IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N‘Persons‘) AND OBJECTPROPERTY(id,N‘isUserTable‘) = 1)
CREATE TABLE Persons (Id_P int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))

Stored Procedure创建插入功能的SQL如下:

USE [databasename]
GO
/****** Object:  StoredProcedure [dbo].[insert_persions]    Script Date: 2/25/2015 11:14:11 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID (‘insert_persons‘,‘p‘) IS NOT NULL
    DROP PROCEDURE insert_persons;
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE insert_persons
    -- Add the parameters for the stored procedure here
    @id int,
    @lastname varchar(255),
    @firstname varchar(255),
    @adress varchar(255),
    @city varchar(255)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    INSERT Persons (Id_P, LastName, FirstName, Address, City)
    VALUES (@id, @lastname, @firstname, @adress, @city)
END
GO

以上代码完成了首先检查Stored Procedure是否存在,如果存在先把该Stored Procedure删掉,然后再创建该Stored Procedure。而其功能则是通过传入的参数,插入一条记录。直接点击Execute或者按F5则以上代码被执行,相应的数据库下面将有一个Stored Procedure名字为insert_persons。以SQL Server 2014为例,只要刷新相应的数据库,再到Programmability->Stored Procedures下面就发现多了个dbo.insert_persons。

执行存储过程

在Stored Procedures下面找到相应的存储过程,点击右键选择Execute Stored Procedure…就可以产生一个新的对话框,填写输入的参数再点击OK就执行完毕。回去查看相应的表会发现多了一行数据。

当然我们也可以通过SQL语句来执行存储过程。

EXECUTE insert_persons 5,"Wang","San","Zhongguancun","Beijing"
EXECUTE insert_persons @id = 6,@firstname = "Wang",@lastname = "San",@adress = "Zhongguancun",@city = "Beijing"

C#执行存储过程

下面的代码比较简单的展示了如何利用C#来执行上面创建的存储过程:

            String conStr = @"Data Source=host\SQLEXPRESS;Initial Catalog=dbtan;Integrated Security=SSPI";
            SqlConnection con = new SqlConnection(conStr);
            try
            {
                con.Open();
                Console.WriteLine("Connect Sucess!");

                SqlCommand com = new SqlCommand();
                com.CommandType = System.Data.CommandType.StoredProcedure;
                com.Connection = con;
                com.CommandText = "insert_persons";

                SqlParameter pId = new SqlParameter("id", 10);
                SqlParameter pLastName = new SqlParameter("lastname", "last");
                SqlParameter pFirstName = new SqlParameter("firstname", "first");
                SqlParameter pAdress = new SqlParameter("adress", "pop");
                SqlParameter pCity = new SqlParameter("city", "Hangzhou");

                com.Parameters.Add(pId);
                com.Parameters.Add(pLastName);
                com.Parameters.Add(pFirstName);
                com.Parameters.Add(pAdress);
                com.Parameters.Add(pCity);

                com.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                con.Close();
            }
            Console.ReadKey();
时间: 2024-12-26 20:28:16

SQL Server中存储过程Stored Procedure创建及C#调用的相关文章

SQL Server中存储过程 比 直接运行SQL语句慢的原因

问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2. 经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete时),可将此复杂操作用

SQL Server中存储过程比直接运行SQL语句慢的原因

原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2.       经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query

SQL Server中存储过程的创建命令

Create Proc 存储过程名称 ( @参数1 参数类型, @参数2 参数类型, ... ... --最后一行参数,别加逗号了,加逗号的意思是表示后面还有参数 ) AS 需要执行的SQL命令 GO 例: 向Example数据库中的department表(表中有ID,Name,Direc,Note这几个参数)插入数据的存储过程: USE Example GO Create Proc pro_department_insert --创建名为pro_department_insert的存储过程 (

sql server 中存储过程where条件需要判断进行拼接

1 USE [Mct] 2 GO 3 /****** Object: StoredProcedure [dbo].[P_CountIcCardTradInfo] Script Date: 05/20/2015 09:04:45 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 9 ALTER PROCEDURE [dbo].[P_CountIcCardTradInfo] 10 ( 11 @bdate dateti

SQL Server中存储过程的调试方法

1.以管理员用户登录DB服务器,把域用户追加到「Administrators」组. 2.在本机上以域用户登录,启动VS. 3.追加DB连接 4.右击要debug的存储过程,选择「ストアドプロシージャにステップイン」. 5.像普通的.NET程序一样进行Debug 6.追加监视

SQL Server 中存储过程的练习

建库建表建约束 插入数据 --建库建表建约束和插入测试数据 use bankDB go --1.完成存款,取款业务--存款 create proc usp_takeMoney @takeType nvarchar(2),@Money money,@cardID char(19),@pass char(6)=null,@remark text =null as print '交易正在进行,请稍后......' if((select COUNT(1) from cardInfo where card

SQL Server中对存储过程的理解

数据库的存储过程理解为,处理数据的子程序,写起来像函数,用起来像函数,在SQL Server中存储过程分为两大类,系统的和自定义的,系统的都放在master系统数据库中,自定义就是自己去写的,用DDL的相关语句即可,创建存储过程,就像函数一样,可以有参,也可以无参,无参的时候写起来很简单: CREATE PROC hello AS BEGIN /*....*/ END GO 执行的时候也是,只需要在自定义存储过程执行即可 EXEC hello 有参的时候写法也不陌生: CREATE PROC h

SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之前开发的系统要么因为历史原因用的是SQL2000要么根本用不着在SQL Server中启用CLR,所以一直没有尝试.最近因为项目的原因,在这方面做了一个调研,现在在这里分享一下心得. 首先要说明的是要在SQL Server中启用CLR必须是在SQL Server2005及以上版本,其次在默认情况下是

在SQL server中如何写存储过程

总结一下SQL server中如何存储. USE [SSQADM]   ----Use 是跳转到哪个数据库,对这个数据库进行操作. GO        ----GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号,相当于提交上面的SQL语句. ----GO是把t-sql语句分批次执行.(一步成功了才会执行下一步,即一步一个GO) /****** Object:  StoredProcedure [dbo].[PROC_four_five_hr]    Scri