微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在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 ' 插入失败 ' )

    
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 ' 插入失败 ' )    

        
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);

        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐