在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);
 ????????}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|