加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 02:53:26 所属栏目:安全 来源:网络整理
导读:在VS2005中,强类型数据集得到了很大的增强.在2003中基于强类型数据集,还有些迁强.而在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);

????????}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读