C# 调用 SQL Server 存储过程

前言

老实说我之前还不知道 “ 存储过程 ” 是何物,但是项目中要用到这个,被迫在短时间内学习了一下   (。>︿<)_θ

存储过程

存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,有利于提高数据处理的效率。

但要注意的是存储过程并不比 SQL 语句执行的更快。

优点:

1、重复使用:存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

2、减少网络流量:存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

3、安全性:参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

缺点:

1、调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

2、移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。

3、重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。

4、 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。

上面对存储过程的优缺点总结的很到位,就抄了过来  (●’◡’●)

C# 调用 SQL Server 存储过程

要调用存储过程,首先要有存储过程。

下面是一个数据库 test ,里面有一个 ShoppingCart 表,表里面存储着一些数据:

新建一个存储过程,搜索出 ShoppingCart 表中, 指定 CartID 所包含的所有商品(ProductName):

CREATE Procedure [dbo].[ShoppingCartItemCount]
(   
    @CartID nvarchar(50)
)
AS
Begin
SELECT ProductName  FROM  ShoppingCart    
WHERE  CartID = @CartID;
RETURN;
END;

数据库里执行一下:

用 C# 调用这个存储过程:

private void Form1_Load(object sender, EventArgs e)
{
    //配置数据库连接属性
    SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
    scsb.DataSource = "localhost";
    scsb.InitialCatalog = "test";
    scsb.UserID = "sa";
    scsb.Password = "1234";

    //新建数据库连接并打开 
    SqlConnection conn = new SqlConnection(scsb.ToString());
    conn.Open();

    //此处调用存储过程 
    SqlCommand cmd = new SqlCommand("ShoppingCartItemCount", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@CartID", SqlDbType.VarChar));
    cmd.Parameters["@CartID"].Value = "007";

    cmd@(@->.)ExecuteNonQuery();

    //接收存储过程返回的数据
    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    DataSet ds = new DataSet();

    adapter.Fill(ds);
    foreach (DataRow col in ds.Tables[0].Rows)
    {
        textBox1.AppendText(col[0].ToString() + "\r\n");
    }
}

运行结果:

上面是带输入输出参入的存储过程的调用,其他还比如无输入参数的存储过程的调用,方法都与之类似,有一篇博客写的不错,地址:https://www.cnblogs.com/hongmaju/p/4571615.html

发表评论

Powered by WordPress | Theme Revised from Doo

苏ICP备18047621号

Copyright © 2017-2024 追光者博客