C#調用存儲過程(帶返回值)和SQL Server DTS的方法

C# 连接sql数据库对 access,excel导入导出操作  一、SQL SERVER 和ACCESS的数据导入导出常规的数据导入导出:使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:   ○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation   ○2Services(数据转换服务),然后选择  czdImport Data 阅读详情
在程序開發中,我們經常要做的事就是訪問資料庫.有時候會調用存儲過程和DTS,下面就此給出例子來說明如何實現

第一部分 調用存儲過程(帶入參數和取得返回值)
1.調用SQL Server的存儲過程
假如我們有如下一個存儲過程,很簡單的實現,只是將兩個傳進來值做加法處理然后返回
CREATE   PROCEDURE  AddMethod
(
    
@returnvalue   int  OUTPUT,      -- 返回結果
     @Parameter_1   int ,                     -- 參數一
     @Parameter_2   int                       -- 參數二
)
AS
-- ---------------------------------------------

set   @returnvalue   =    @Parameter_1   +   @Parameter_2

RETURN    @returnvalue
-- -----------------------------------------------

GO
以下是在c#中調用此存儲過程的代碼
         private   int  TestProcedure()
        {
            System.Random rnd 
=   new  Random();
            
string  constr  =   " Data Source=localhost;initial catalog=testdb;user id=sa;password=sa;connect timeout=3000 " ;
            SqlConnection conn 
=   new  SqlConnection(constr);
            conn.Open();
            SqlCommand cmd 
=   new  SqlCommand();
            cmd.Connection 
=  conn;
            cmd.CommandText 
=   " AddMethod " ;
            cmd.CommandType 
=  CommandType.StoredProcedure;
            
// 參數一
            SqlParameter parameter_1  =   new  SqlParameter( " @Parameter_1 " ,SqlDbType.Int);
            parameter_1.Direction 
=  ParameterDirection.Input;
            parameter_1.Value 
=  ( int )(rnd.NextDouble()  *   100 );
            
// 參數二
            SqlParameter parameter_2  =   new  SqlParameter( " @Parameter_2 " ,SqlDbType.Int);
            parameter_2.Direction 
=  ParameterDirection.Input;
            parameter_2.Value 
=  ( int )(rnd.NextDouble()  *   100 );
            
// 返回值
            SqlParameter returnValue  =   new  SqlParameter( " @returnValue " ,SqlDbType.Int);
            returnValue.Direction 
=  ParameterDirection.Output;

            cmd.Parameters.Add(returnValue);
            cmd.Parameters.Add(parameter_1);
            cmd.Parameters.Add(parameter_2);
            
            
try
            {
                cmd.ExecuteNonQuery();       
            }
            
finally
            {
                conn.Close();
            }
            
return  ( int )returnValue.Value;
        }

2.調用Oralce的存儲過程
先創建一個package和package body,代碼如下
(1).Package
CREATE   OR   REPLACE  package TestPackage  is
  type mytype 
is  ref  cursor ;
  
procedure  p_Test(mycs out mytype);
  
function  f_get( str   in   varchar2 )  return   varchar2 ;
end ;
(2).Package Bodies
create   or   replace  package body TestPackage  is

  
procedure  p_Test(mycs out mytype)  is
  
begin
    
open  mycs  for
      
select   *   from  dual;
  
end  p_Test;

  
function  f_get( str   varchar2 )  return   varchar2   is
    str_temp 
varchar2 ( 100 ) : =   ' good luck ! ' ;
  
begin
    str_temp :
=  str_temp  ||   str ;
    
return  str_temp;
  
end  f_get;
end ;
以上建好了存儲過程和方法,現在看下如何在c#中實現調用.
先來個調用方法的
         private   string  TestFunction()
        {
            
string  constr  =   " Data source=E4MT;user id=sa;password=sa " ;
            OracleConnection conn 
=   new  OracleConnection(constr);
            conn.Open();
            
            OracleCommand cmd 
=   new  OracleCommand();
            cmd.Connection 
=  conn;
            cmd.CommandText 
=   " TestPackage.f_get " ;
            cmd.CommandType 
=  CommandType.StoredProcedure;
            OracleParameter parameter_1 
=   new  OracleParameter( " str " ,OracleType.VarChar, 100 );
            parameter_1.Direction 
=  ParameterDirection.Input;
            parameter_1.Value 
=   " This is just a test " ;
            OracleParameter parameter_2 
=   new  OracleParameter( " result " ,OracleType.VarChar, 100 );
            parameter_2.Direction 
=  ParameterDirection.ReturnValue;

            cmd.Parameters.Add(parameter_1);
            cmd.Parameters.Add(parameter_2);

            
try
            {
                cmd.ExecuteNonQuery();
            }
            
finally
            {
                conn.Close();
            }
            
return  parameter_2.Value.ToString();
        }
再來個調用存儲過程的,返回的是個數據集
         private  DataSet TestProc()
        {
            
string  constr  =   " Data source=E4MT;user id=sa;password=sa " ;
            OracleConnection conn 
=   new  OracleConnection(constr);
            conn.Open();
            
            OracleCommand cmd 
=   new  OracleCommand();
            cmd.Connection 
=  conn;
            cmd.CommandText 
=   " TestPackage.p_Test " ;
            cmd.CommandType 
=  CommandType.StoredProcedure;
            OracleParameter parameter_1 
=   new  OracleParameter( " mycs " ,OracleType.Cursor);
            parameter_1.Direction 
=  ParameterDirection.Output;

            cmd.Parameters.Add(parameter_1);

            DataSet ds 
=   new  DataSet();
            
try
            {
                OracleDataAdapter da 
=   new  OracleDataAdapter(cmd);
                da.Fill(ds,
" test " );
            }       
            
finally
            {
                conn.Close();
            }
            
return  ds;
        }

以上介紹了在c#中分別調用sql 和oracle的存儲的方法

第二部分 C#調用 sql server 的DTS
   目前知道有兩種比較適用的方法:
(1).調用DTSRun命令來跑DTS.此種方法調用到了Master..xp_cmdshell擴展存儲過程,故需要將調用的用戶開通能訪問此擴展存儲過程的權限.
         private   void  TestRunDTS()
        {
            
string  constr  =   " Data Source=localhost;initial catalog=master;user id=sa;password='';connect timeout=3000 " ;
            SqlConnection conn 
=   new  SqlConnection(constr);
            conn.Open();
            SqlCommand cmd 
=   new  SqlCommand();
            cmd.Connection 
=  conn;
            cmd.CommandText 
=   "exec master..xp_cmdshell 'DTSRun /~Z0x8E9EF55158ABA56C3C3346137F1F7B7B090F1F61D54D3981CFA1DB0E8B50C4E0D416AF2F746FA482B5E3C2AABA52D4838DAA496938F1E61155CBB055FF4082181E6BE53F08A47D7E6A82E6B77E3F83FCBAAD1B'";
            
            
try
            {
                cmd.ExecuteNonQuery();       
            }
            
finally
            {
                conn.Close();
            }
        }
注意看上面標紅色的部分,exec是來報告存儲過程的,xp_cmdshell 及后面的一長串代碼就是存儲過程及參數.dtsrun其實是dos下的命令.后面跟的是DTS Package的ID.這個可以將DTS排成排程然后在屬性中查看到.
(2)第二種方法就要用到Microsoft提供的一個COM類.
直接提供下載吧: Microsoft.SQLServer.DTSPkg80.dll
用的是 LoadFromSQLServer()方法
private   void  TestDTS()
{
   Package2Class package 
=   new  Package2Class();
            
object  pVarPersistStgOfHost  =   null ;
            package.LoadFromSQLServer("localhost", 
" sa " ,  "" ,DTSSQLServerStorageFlags.DTSSQLStgFlag_Default
                ,
null , null , null , " DTSTest " ,  ref  pVarPersistStgOfHost);
            package.Execute();
            package.UnInitialize();
            package 
=   null ;
}
參數說明: LoadFromSQLServer參數分別是:ServerName,userID,password,DTSSQLServerStorageFlags,PackagePassword,PackageGuid,PackageVersionGuid,PackageName

第三部分:SQL Server 存儲過程中調用DTS
DECLARE   @object   int
DECLARE   @hr   int
DECLARE   @src   varchar ( 255 ),  @desc   varchar ( 255 )

-- 生成對象
   print   ' start to create DTS.Pachage '  
  
EXEC     @hr     =    sp_OACreate    ' DTS.Package ' ,    @object    OUTPUT     
  
if     @hr     <>     0      
  
BEGIN      
  
print   ' error create DTS.Package '  
  
EXEC  sp_OAGetErrorInfo  @object ,  @src  OUT,  @desc  OUT
  
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
  
RETURN      
  
END      
  
print   ' create DTS.Pachage successful '  


-- 調用方法
   print   ' start to LoadFromSQLServer '  
  
EXEC     @hr     =    sp_OAMethod    @object ,    ' LoadFromSQLServer ' , NULL ,   
  
@ServerName = ' localhost ' ,    @PackageName = ' testdts ' ,    @Flags = 256    
  
IF     @hr     <>     0      
  
BEGIN        
  
print   ' error LoadFromSQLServer '  
  
EXEC  sp_OAGetErrorInfo  @object ,  @src  OUT,  @desc  OUT
  
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
  
RETURN      
  
END      
  
print   ' LoadFromSQLServer successful '  

-- 設置全局屬性(如果DTS有的話)
  print   ' start to set property '  
 
EXEC   @hr   =  sp_OASetProperty  @object ,  ' GlobalVariables("var_1").Value ' , 123
 
IF   @hr   <>   0  
 
BEGIN  
 
print   ' error set property '  
  
EXEC  sp_OAGetErrorInfo  @object ,  @src  OUT,  @desc  OUT
 
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
 
RETURN  
 
END  
 
print   ' set property successful '  

-- 運行DTS
   print   ' start to execute '  
  
exec   @hr   =  sp_OAMethod  @object , ' Execute '
  
if   @hr   <>   0
  
begin
  
print   ' Execute Failed '
  
EXEC  sp_OAGetErrorInfo  @object ,  @src  OUT,  @desc  OUT
 
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
  
return  
  
end   
  
print   ' Execute Successful '
    
-- 銷毀對象
EXEC   @hr   =  sp_OADestroy  @object
IF   @hr   <>   0
BEGIN
PRINT   ' Destroy Package failed '  
EXEC  sp_OAGetErrorInfo  @object ,  @src  OUT,  @desc  OUT
SELECT  hr = convert ( varbinary ( 4 ), @hr ), Source = @src , Description = @desc
RETURN
END
print   ' destroy successful '  

GO


以上介紹了調用存儲過程及DTS的方法,可靈活應用於程式開發中.
SQLServer2005 DTS 补丁(For SQL Server 2000 DTS) 立即下载

相关推荐

SQL Server从DTS到SSIS

详细讲述SQL Server数据库复制功能在不用版本中的迁移。请注意,这个一个英文资料。

C#(在WeBAPI)获取Oracle(在PL/SQL)游标类型的存储过程(用到了RefCursor)

需求:WebAPI服务端,通过Oracle数据库的存储过程,获取数据。 在PL/SQL 建立存储过程:(先来最简单的,就是把整个表都查出来) create or replace procedure SQL_WX_SP(out_return out sys_refcursor) is begin open out_return for 'select * from wx_sp...

aaa002002的博客 517

C#在查询中使用存储过程

摘要:C#源码,数据库应用,存储过程  C#在查询中使用存储过程,

谈如何使用C#调用SSIS包

 上次转过一篇关于如何使用C#调用SSIS包的文章,但其平台是旧版本的。现在讲的是如下平台: Windows2003 R2 SP2;SQL SERVER 2005 加所有最新补丁;VS 2005 professional Edition。首先应该加入引用C:/Program Files/Microsoft SQL Server/90/SDK/Assemblies/Microsoft

sfz_roger的专栏 1345

SQL Server存储过程在C#中调用的简单实现方法

主要给大家介绍了关于SQL Server存储过程在C#中调用的简单实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Server存储过程具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

某讯天御滑块验证码逆向实战:从参数解析到环境对抗

本文详细解析了某讯天御滑块验证码的逆向工程实战技巧,从关键参数解析到浏览器环境模拟对抗。重点介绍了collect、eks等参数的逆向思路,以及如何通过puppeteer等工具补全环境检测,帮助开发者有效突破验证码防护。文章还提供了常见错误解决方案和性能优化建议,是验证码逆向领域的实用指南。

weixin_29325007的博客 437

阿里云 DTS迁移自建SQL Server注意事项

当完整备份数据库的时候,我们有时候可能会遇到一种极端情况,比如服务器上C,D,E三个盘符都只剩下5G空间了 但是如果要完整备份业务库需要12G的空间,那么这时候怎么办呢? 使用文件组备份吗?但是数据库没有做表分区,没有分多个文件组,就只有一个主文件组啊 这时候我们可以使用备份文件分割 我使用自己机器示范一下,我的机器上有一个Temp2的数据库,数据库大小为1GB 备份 我们做一个Temp2数据库的完整备份 DECLARE @CurrentTime VARCHAR(50),..

Hehuyi_In的博客 2474

【汽车故障诊断2】从标准到实战:解码DTC格式背后的诊断逻辑

本文深入解析汽车诊断故障码(DTC)的格式与逻辑,对比了OBD-II标准(如ISO 15031-6)的5字符格式与UDS协议(ISO 14229-1)下更丰富的3字节格式。文章从国际标准出发,结合实战案例,阐述了DTC如何作为汽车电子系统的“体检报告”,帮助工程师和维修技师精准定位故障,并详细解读了UDS 19服务如何读取和管理DTC状态。

berry的博客 711

SQL Server的DTS

摘要:SQL Server的DTS是早期ETL工具,支持异构数据迁移和转换,通过图形界面设计数据流处理清洗、格式转换等。2005年后被SSIS取代,后者增强错误处理、数据流组件和.NET扩展。建议新项目使用SSIS,遗留DTS包可通过迁移向导转换,但复杂逻辑需手动调整。SSIS在性能和扩展性上更优,适合现代数据集成需求。(149字)

RulesChen的博客 338

保姆级教程:用YOLOv5s训练PCB缺陷检测模型(附北大公开数据集)

本文提供了一份基于YOLOv5s的PCB缺陷检测模型从零开始的完整实战教程。详细解析了如何使用北大公开数据集,涵盖环境搭建、数据处理、模型训练、性能评估及优化部署全流程,并针对工业场景中常见的类别不均衡问题给出了具体解决方案,旨在帮助开发者快速构建高精度的自动化质检系统。

weixin_28285943的博客 306

linux基线检查、基线加固、安全漏扫、系统漏洞、centos7、文尾部附脚本

等保三级-CentOS Linux 7合规基线检查 风险分类:系统-等保三级-CentOS Linux 7合规基线检查 检测项说明: CentOS Linux 7合规基线检查,对标中国等保2.0第三级等级保护基本要求部分检查项目,仅供参考 检查项目 : 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 加固建议: 1、执行`cat /etc/shadow | awk -F: '($2 == "" ) { print $1}' `, 查看空密码账户并处理; 2、

swindy博客 5622

转C#調用存儲過程(帶返回值)和SQL Server DTS的方法

  C#調用存儲過程(帶返回值)和SQL Server DTS的方法 在程序開發中,我們經常要做的事就是訪問資料庫.有時候會調用存儲過程和DTS,下面就此給出例子來說明如何實現第一部分 調用存儲過程(帶入參數和取得返回值)1.調用SQL Server的存儲過程假如我們有如下一個存儲過程,很簡單的實現,只是將兩個傳進來值做加法處理然后返回CREATE

cxlooing的专栏 1262

终极版:完美实现在PyQT5或Pyside2中构建无边框圆角阴影窗口,可拖动,阴影随窗口活动状态变化,窗口鼠标拖动改变大小(完美复用)

终极版(完美复用):完美实现在PyQT5或Pyside2中构建无边框圆角阴影窗口,可拖动,阴影随窗口活动状态变化,窗口鼠标拖动改变大小

文野海阳的博客 1668

c#中调用SQLserver的DTS包进行数据的转换

DTS是sql server里很好用的一样东西,用它来做信息系统的数据导入,是再合适不过了。那么如何在代码里调呢DTS的包呢?首先用sql的工具(导入和导出工具)建立一个包,保证在sqlserver中就可以了然后开始编程新建C#工程,引用Microsoft DTSPackage Object Library代码是很简单的:创建一个类DTS.cs using System;u

NewMap的专栏 2765

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 588

Megatron-LM中的TP、PP、DP、SP、CP并行

SP主要优化的是激活内存,它沿序列维度切分部分激活,适用于较短序列并行。CP主要解决的是长序列的显存问题,它沿序列维度切分所有激活和输入,并且对注意力机制也进行并行处理。二者可以组合使用,特别是当 TP > 1 并且需要处理长序列时,通过启用 SP 和 CP 可以最大化地优化内存使用和加速计算。

u013250861的博客 860

c#中调用DTS

DTS是sql server里很好用的一样东西,用它来做信息系统的数据导入,是再合适不过了。但是sql server中的DTS毕竟只有数据库开发人员才会调用,运营人员不懂数据库知识,只能写个调DTS的程序给他们用。网上也有一些文章讲调用DTS的,不过大多是用DTSRun.exe,那么如何在代码里调呢?首先引用Microsoft DTSPackage Object Library代码是很简单的:

老汉--小庙和尚 2957

OmniParser V2 和 OmniTool 让 AI 来控制 Windows 设备

OmniParser V2 和 OmniTool 是由微软开发的一套工具,通过屏幕解析技术让 AI 能够理解和控制 Windows 设备。OmniParser V2 是一款数据解析工具,可以解读屏幕内容,并将内容传递给大模型OmniTool 则是一个运行 Windows Agent 的工具,提供 Windows 界面给 AI 操作。

简简单单Onlinezuozuo 2730

[转]C#调用SSIS包(DTS)

首先,有两种调用方式:直接用(需要引用Microsoft.SqlServer.DTSRuntimeWrap.dll),通过Web Service进行执行SSIS包. 如果是直接调用那么需要引用Microsoft.SqlServer.DTSRuntimeWrap.dll,客户端需要安装MS SQL 2005的客户端组件,调用的代码如下: using System; using Sy...

admi88888888的博客 320

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C#调用SSIS包(DTS)

首先,有两种调用方式:直接用(需要引用Microsoft.SqlServer.DTSRuntimeWrap.dll), 通过Web Service进行执行SSIS包. 如果是直接调用那么需要引用Microsoft.SqlServer.DTSRuntimeWrap.dll,客户端需要安装MS SQL 2005的客户端组件,调用的代码如下: using System; using Syste...

weixin_30338497的博客 412

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[转] SQL server数据库存储过程测试方法

许多基于Windows的系统都使用了SQL Server作为后台组件。待测程序(AUT:Application Under Test)或者待测系统(SUT:System Under Test)经常通过存储过程来访问数据库。对于这些应用场景,可以把SQL存储过程想象成应用程序的辅助函数。有两种基本的方法可以用来编写针对SQL存储过程的轻量级的自动化测试。   第一种方法是在原始的SQL环境中编写自...

网络技术文章收藏 1000

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C#中执行DTS的问题,请关注!

以下代码为调用DTS的写法:DTS.Package2Class package=new DTS.Package2Class();   try   {    Object MIA=System.Reflection.Missing.Value;    package.LoadFromSQLServer("(local)",      "sa", "000", DTS.DTSSQLServerStor

UP TO YOU 随心•索遇 1491

写一个在程序中创建dts包,实现数据用dts导入到sql的类。

 //备注,从getItemToItem()取的字段对应,getSourceTableName()取得表关系对应。using System;using System.Data;using System.Data.SqlClient;namespace Import{ ///  /// 导入学生中考成绩DTS包 ///  public class ImportStuGrade {  //

bobibobi的专栏 1429
上一篇: C# aspx页面动态加载ascx用户控件
下一篇: [转]字符编码-使用c#研究
msikruby
博客等级 码龄19年 11粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值