CSharp 调用存储过程来执行增、删、改操作

对表进行增,删,改数据时,每次都需要访问一次数据库,这样会影响性能;如果把查询的数据拼接成XML形式,作为一个参数整体传给存储过程来处理,这只访问数据库一次,执行速度会快很多。

1.CSharp 代码如下:

public bool CreateUpdateDeleteHelpCategory(HelpCategoryInfo helpCategory, DataProviderAction action)
{
    bool result;
    if (null == helpCategory)
    {
        result = false;
    }
    else
    {
        DbCommand storedProcCommand = this.database.GetStoredProcCommand("cp_HelpCategoryTest_CreateUpdateDelete");
        this.database.AddInParameter(storedProcCommand, "Action", DbType.Int32, (int)action);
        this.database.AddOutParameter(storedProcCommand, "Status", DbType.Int32, 4);
        if (action != DataProviderAction.Create)
        {
            this.database.AddInParameter(storedProcCommand, "CategoryId", DbType.Int32, helpCategory.CategoryId);
        }
        if (action != DataProviderAction.Delete)
        {
            this.database.AddInParameter(storedProcCommand, "Name", DbType.String, helpCategory.Name);
            this.database.AddInParameter(storedProcCommand, "IconUrl", DbType.String, helpCategory.IconUrl);
            this.database.AddInParameter(storedProcCommand, "IndexChar", DbType.String, helpCategory.IndexChar);
            this.database.AddInParameter(storedProcCommand, "Description", DbType.String, helpCategory.Description);
            this.database.AddInParameter(storedProcCommand, "IsShowFooter", DbType.Boolean, helpCategory.IsShowFooter);
        }
        this.database.ExecuteNonQuery(storedProcCommand);
        result = ((int)this.database.GetParameterValue(storedProcCommand, "Status") == 0);
    }
    return result;
}

2.SQL脚本:

CREATE PROCEDURE [dbo].[cp_HelpCategoryTest_CreateUpdateDelete]
    (
        @CategoryId INT = NULL,
        @Name NVARCHAR(100) = NULL,

        @IconUrl NVARCHAR(255) = NULL,
        @IndexChar CHAR(1) = NULL,
        @Description NVARCHAR(1000) = NULL,
        @IsShowFooter BIT = NULL,
        @Action INT,
        @Status INT OUTPUT
    )
AS
    DECLARE @DisplaySequence INT
    DECLARE @intErrorCode INT
    -- 初始化信息
    SELECT @Status = 99, @intErrorCode = 0

    IF @Action = 2 -- 删除
    BEGIN
        DELETE FROM HelpCategoriesTest WHERE CategoryId = @CategoryId
        IF @@ROWCOUNT = 1
            SET @Status = 0
    END

    IF @Action = 0 -- 创建
    BEGIN
      IF (SELECT MAX(DisplaySequence) FROM HelpCategoriesTest) IS NULL
          SET @DisplaySequence=1
      ELSE
         SET @DisplaySequence=(SELECT MAX(DisplaySequence) FROM HelpCategoriesTest)+1

        INSERT INTO HelpCategoriesTest ([Name], DisplaySequence, IconUrl, IndexChar, Description,IsShowFooter)
        VALUES (@Name, @DisplaySequence, @IconUrl, @IndexChar, @Description,@IsShowFooter)

        IF @@ROWCOUNT = 1
            SET @Status = 0

        RETURN
    END

    IF @Action = 1 -- 修改
    BEGIN
        SET @DisplaySequence=(SELECT DisplaySequence FROM HelpCategoriesTest WHERE CategoryId=@CategoryId)

        -- 修改分类信息
        UPDATE HelpCategoriesTest SET [Name] = @Name, DisplaySequence = @DisplaySequence, IconUrl = @IconUrl, IndexChar = @IndexChar, Description = @Description, IsShowFooter = @IsShowFooter
        WHERE CategoryId = @CategoryId

        SET @intErrorCode = @intErrorCode + @@ERROR

        IF @intErrorCode = 0
        BEGIN
            SET @Status = 0
        END

        RETURN
    END
时间: 2024-08-03 15:43:38

CSharp 调用存储过程来执行增、删、改操作的相关文章

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform)让用户方便的操作数据库中的数据. 什么是ADO.NET 是一组库类,System.Data. Ado.net组成 Connection:用来连接数据库 Command:用来执行SQL语句 DataReader:只读.只进的结果集,一条一条读取数据(SteamReader.XmlReader) Da

ADO.NET 增 删 改 查

ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访问技术的基础 连接数据库基本格式:需要两个类1.数据库连接类 SqlConnection2.数据库操作类 SqlCommand 1.连接数据库写连接字符串,立马就要想到有4点要写完,1.连接哪台服务器,2.连接哪个数据库,3.连接用户名,4.密码string sql = "server=.(服务器i

Python---MySQL数据库之四大操作(增 删 改 查)

一.对数据库,表,记录---四大操作(增 删 改 查) 1.操作数据库 (1)对数据库(文件夹):进行增加操作 Create  database  库名; 例:  Create  database  db7 ; 查询库: show  databases; 结果: +-----------------------------+ | Database                   | +----------------------------+ | information_schema | |

MyIbatis:存储过程(增,删,改,查)

参考资料 1 ibatis3.0存储过存的一些细节 http://blog.csdn.net/axman/archive/2010/03/05/5349349.aspx2 ibatis3.X如何调用Oracle存储过程定义的in数组 http://topic.csdn.net/u/20110125/20/ade11108-761e-4b2d-96c4-fae83907ea9f.html3 ibatis3调用存储过程 http://www.iteye.com/topic/5314564 ibati

MySql 执行JDBC联接(增/删/改/查)操作

视频地址:http://www.tudou.com/programs/view/4GIENz1qdp0/ 新建BaseDao package cn.wingfly.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class BaseDao

【WPF学习笔记】之如何通过后台C#代码添加(增/删/改按钮)实现对SQLServer数据库数据的更改

首先,需要连接SQLServer数据库的服务器名称server.数据库名database.数据库用户名uid以及密码pwd,如下图: 然后需要以下数据库SQL代码段,粘贴复制即可: DbHelperSQL.cs代码: 注意要更改红框中的内容 using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using S

数据库基础学习4--表格的 增 删 改 查(简单查询与高级查询)

一.增 C:create 增加,创建,向数据库里面添加数据. insert into Fruit values('K009','苹果',3.0,'高青',90,'') insert into Fruit(Ids,Name,Price,Source,Numbers) values('K010','苹果',3.0,'高青',90) 二.改 U:update修改,从数据库表里面修改数据. update Fruit set Source='烟台' where Ids='K001' 三.删 D:delet

2016/05/05 smarty 增 删 改

共  八个页面 ①login.php 1 <?php 2 include("init.inc.php"); 3 4 $smarty->display("login.html"); 5 ?> ②login.html  显示模板  在templates模板文件夹中 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q

oracle 11g 建库 建表 增 删 改 查 约束

一.建库 1.(点击左上角带绿色+号的按钮) 2.(进入这个界面,passowrd为密码.填写完后点击下面一排的Test按钮进行测试,无异常就点击Connect) 二.建表 1-1. create table 表名1( Tid number(4) --primary key 列级约束(主键), Tname varchar(10) --ont null  非空约束,只能定义在列级约束, Tsex varchar2(2)--check (tsex='男'  or  tsex='女') 检查约束, T