VS2005中自定义自增主键数据表操作的快捷开发

本文介绍如何在Visual Studio 2005中利用强类型数据集进行快速开发,特别是在处理自定义主键的情况下。文章通过创建WebService项目和WinForm项目为例,详细解释了使用存储过程生成自定义自增主键的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在VS2005中,强类型数据集得到了很大的增强.在2003中基于强类型数据集,还有些迁强.而在VS2005中,使用强类型数据集进行程序开发,非常的快速方便.使用您的数据库中有很多表使用了自定义的主键,还能很方便的使用强类型数据集吗?经过一段时间的摸索,终于找到了比较简单的方法.我这里举一个智能客户端程序的例子,拿出来和大家一块分享.
1.创建一个WebService项目和一个WinForm项目
2.在WebService添加一个强类型数据集,命名为DocDs.xsd。然后,从“对象资源管理器”拖过来一个数据表(事先在管理器中已经创建目标数据库并连接),如WF_WDB。这时会生成数据集的相关代码。
3.编写生成自定义自增主键的存储过程和WF_WDB插入数据的存储过程,如下:

-- 获取最大申报编号
/*  调用方法例子
--获取最大申报编号
declare @v_sq_id_max DM_短申报代码
exec Get_SBBH 'SB_SB','V_SBBH',@v_sq_id_max output
print @v_sq_id_max
*/

ALTER   PROCEDURE  Get_SBBH
    (
    
@tab_MC          varchar ( 50 ),    -- 表名
     @Key_MC          varchar ( 50 ),     -- 主键名
     @OUT_V         DM_短申报代码  OUTPUT
    )
AS
    
/* SET NOCOUNT ON */  
Begin   Transaction

declare      @v_rq           varchar ( 10 )    
declare      @v_sq_id_max  DM_短申报代码
declare      @v_sq_id      DM_短申报代码
declare      @strSql           nvarchar ( 255 )
    
    
Set   @v_rq   =   Convert ( char ( 8 ), getDate (), 112 )    -- 日期字符串序列
     --  生成申请ID
     set   @strSql   =   ' Select @v_sq_id_max=isnull(Max( ' + @Key_MC + ' ), '' 000001 '' ) from  ' + @tab_MC  
    
exec  sp_executesql  @strSql ,N ' @v_sq_id_max DM_短申报代码 out ' , @v_sq_id_max  out
     
   
If   @v_sq_id_max = ' 000001 '
     
Begin   
       
Set   @v_sq_id   =    @v_rq   +   @v_sq_id_max
     
End
   
Else   if   @v_sq_id_max = ' 999999 '
     
Begin
        
rollback   Transaction ;
        
Set   @out_v    =   ' -900 '
        
RAISERROR  (  13001 16 10 ' 主键溢出 ' )
     
End
   
Else
     
Begin
            
Set   @v_sq_id   =   @v_rq   +   Right ( convert ( varchar ( 8 ),  Convert (numeric( 8 ), Right ( @v_sq_id_max , 6 )) +   1000001 ), 6 )
     
End
     
    
print   ' @v_sq_id: '   +   @v_sq_id ;
    
  
if   @@ERROR <> 0
    
begin
        
rollback   Transaction ;
        
Set   @out_v    =   ' -100 '
        
RAISERROR  (  13001 16 10 ' 插入失败 ' )
    
end  
  
if   @@ERROR = 0
    
begin
        
commit   Transaction
          
set   @OUT_V    =   @v_sq_id
    
end

 

ALTER   PROCEDURE  dbo.InsertWF_WDB
(
    
@V_WD_DM  DM_短申报代码 output,
    
@V_WD_MC   varchar ( 60 ),
    
@V_WD_BM   varchar ( 60 ),
    
@V_WD_LJ   varchar ( 100 )
)
AS
    
SET  NOCOUNT  OFF ;
Begin
    
Begin   Transaction
    
-- 生成主键
     declare   @v_sq_id_max  DM_短申报代码
    
exec  Get_SBBH  ' WF_WDB ' , ' V_WD_DM ' , @V_WD_DM  output
    
-- 插入数据
     INSERT   INTO   [ WF_WDB ]  ( [ V_WD_DM ] [ V_WD_MC ] [ V_WD_BM ] [ V_WD_LJ ] VALUES  ( @V_WD_DM @V_WD_MC @V_WD_BM @V_WD_LJ );

    
-- 返回值处理
     if   @@ERROR <> 0
        
begin
            
rollback   Transaction ;
             
Set   @V_WD_DM    =   ' -100 '         
            
RAISERROR  (  13001 16 10 ' 插入失败 ' )    
        
end  
    
if   @@ERROR = 0
    
begin
        
commit   Transaction
     
end
     
END


4.点击WF_WDBTableAdapter,在属性窗口中,设置InsertCommand的值,CommandType为StoredProcedure,CommandText=InsertWF_WDB。注意,这里要检查参数集合,设置自增主键字段为Direction为Output,并为每个参数设定SourceColumn.设置完成后保存。
5.新建一个Web服务程序DocManage.asmx,添加方法SelectWF_WDMBB()和Update,保存并生成。代码如下

         /// <summary>
        
/// 查询文档表
        
/// </summary>
        
/// <returns>WF_WDBDataTable</returns>

        [WebMethod]
        
public  NSamWebService.DataSet.DocDs.WF_WDBDataTable SelectWF_WDB()
        
{
            NSamWebService.DataSet.DocDsTableAdapters.WF_WDBTableAdapter apWf_wdb 
= new NSamWebService.DataSet.DocDsTableAdapters.WF_WDBTableAdapter();
            NSamWebService.DataSet.DocDs.WF_WDBDataTable dt 
= new NSamWebService.DataSet.DocDs.WF_WDBDataTable();
            apWf_wdb.Fill(dt);
            
return dt;
        }

        
/// <summary>
        
/// 更新文档表
        
/// </summary>
        
/// <param name="dt">WF_WDBDataTable</param>
        
/// <returns></returns>

        [WebMethod]
        
public   int  Update(DocDs.WF_WDBDataTable dt)
        
{
            NSamWebService.DataSet.DocDsTableAdapters.WF_WDBTableAdapter apWf_wdb 
= new NSamWebService.DataSet.DocDsTableAdapters.WF_WDBTableAdapter();
            
return apWf_wdb.Update(dt);
        }


6.在WinForm项目中,添加Web引用,再添加一个Form,从工具箱拖来一个DataGridView,选择数据源绑定到WF_WDB,并加入测试代码.

        NSamClient.DocManage.DocDs.WF_WDBDataTable dt  =   new  NSamClient.DocManage.DocDs.WF_WDBDataTable();
        NSamClient.DocManage.DocManage docManage1 
=   new  NSamClient.DocManage.DocManage();

        
// 装载
         private   void  文档表_List_Load( object  sender, EventArgs e)
        
{
            dt 
= this.docManage1.SelectWF_WDB();
            
this.wFWDMBBBindingSource.DataSource = dt;
        }

        
// 更新
         private   void  button1_Click( object  sender, EventArgs e)
        
{
            docManage1.UpdateWF_WDB(dt);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值