在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] 举报,一经查实,本站将立刻删除。