泡泡乐园欢迎各位朋友光临!

使用数据集设计器创建数据集

上一篇 / 下一篇  2006-11-20 14:05:31 / 个人分类:学习

SupeSite/X-Space官方站Qr(o:BKI"c+Ye

在此演练中,您将使用“数据集设计器”创建数据集。它将指导您完成创建新项目并向其中添加新“数据集”项的全过程。您将学会在不使用向导的情况下如何根据数据库中的表来创建表。

vX*P I N,E0

6x?*yT|4W;Sp-[0本演练演示如下任务:

&w-h3@1L+YhxM/^%H0
  • 'yMg6]r{$r0创建新的“Windows 应用程序”项目。SupeSite/X-Space官方站`1d#W6OoV2L LG/d

  • SupeSite/X-Space官方站*X;J1[$F} PT

    将空的“数据集”项添加到项目中。SupeSite/X-Space官方站DTP5cQ eS

  • SupeSite/X-Space官方站:d3r8~-?T4l

    在应用程序中通过使用“数据集设计器”生成数据集来创建和配置数据源。

    !^2T/C*C\G.N0
  • SupeSite/X-Space官方站;Os#|y.x:y1L

    在“服务器资源管理器”中创建到 Northwind 数据库的连接。

    SNIUd|I0
  • SupeSite/X-Space官方站4XOhs/PZ4G

    根据数据库中的表在数据集中随 TableAdapter 一起创建表。SupeSite/X-Space官方站O-M pfe%`}&c

Note注意
SupeSite/X-Space官方站}3b~.~q*{4w

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的现用设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置SupeSite/X-Space官方站)VS | f6i^.Mc

Collapse 图像先决条件

KJ9m.f\/N0若要完成本演练,您需要:

?w2RqUE0
  • SupeSite/X-Space官方站)Cd \?-vhIV

    访问 Northwind 示例数据库(SQL Server 或 Access 版)。有关更多信息,请参见如何:安装示例数据库

    /BMl^8S*x0

Collapse 图像创建新的 Windows 应用程序项目

创建新的 Windows 应用程序项目

  1. SupeSite/X-Space官方站 [2q JZ1D-_1s*HZI

    从“文件”菜单创建一个新的项目。

    4pa#wqq!y0
  2. SupeSite/X-Space官方站 g1c}$SF6M(U

    在“项目类型”窗格中选择一种编程语言。SupeSite/X-Space官方站0|T6Wq? L}Xc

  3. :c F4`t,f&H R1m0在“模板”窗格中单击“Windows 应用程序”。SupeSite/X-Space官方站'vY ]/@Cn8E |d

  4. SupeSite/X-Space官方站n+M6\g,krW Ri"}

    将项目命名为 DatasetDesignerWalkthrough,然后单击“确定”。

    4}5mP#OFzWh0

    bDH*I(TM0Visual Studio 将把该项目添加到“解决方案资源管理器”中,并在设计器中显示一个新窗体。

    @7U7ko*K'K a bC0

Collapse 图像将新的数据集添加到应用程序中

向项目添加新的数据集项

  1. 3Ve8\"M8U;X0在“项目”菜单上单击“添加新项”。

    ?+bJ`c%l Ws0

    c'S*EFA0即会出现“添加新项”对话框。

    s e!h4]q)o0
  2. Ti&v!L2YK2^W0在“添加新项”对话框的“模板”框中,单击“数据集”。SupeSite/X-Space官方站4_,R+n-u$L[!W's

  3. SupeSite/X-Space官方站H N+z~ Er4k

    将该数据集命名为 NorthwindDataset,然后单击“添加”。 SupeSite/X-Space官方站]-f$ou^-V a9z5`O)C+D]

    L;L-R5J6L0Visual Studio 将把名为“NorthwindDataset.xsd”的文件添加到项目中,并在“数据集设计器”中打开该文件。SupeSite/X-Space官方站-n5j I/A _W

Collapse 图像在“服务器资源管理器”中创建数据连接

创建到 Northwind 数据库的连接

  1. SupeSite/X-Space官方站 I$SH'cY~J

    在“视图”菜单上单击“服务器资源管理器”。

    ,ae,DmynU0
  2. SupeSite/X-Space官方站&V6Sw-Ra&h!])o6F}

    在“服务器资源管理器”中单击“连接到数据库”按钮。SupeSite/X-Space官方站@{0Q;{h.GrN;x6a

  3. }O@7E U0创建到 Northwind 示例数据库的连接。

    0z8g'^,?\ ]*p0
    Note注意
    SupeSite/X-Space官方站P3j7\4]*V^#p_4C

    对于此演练,您可以连接到 Northwind 的 SQL Server 或 Access 版本。SupeSite/X-Space官方站D&f1^Y;g ^

    SupeSite/X-Space官方站h:x(C9FK)z+M

    有关创建到 SQL Server 的连接的信息,请参见如何:创建与 SQL Server 数据库的连接SupeSite/X-Space官方站+u!D|6D_8a

    SupeSite/X-Space官方站!eUK2Nvy$?1^

    有关创建到 Access 的连接的信息,请参见如何:创建与 Access 数据库的连接

    F` ]9Q@r*Hl]z0

Collapse 图像在数据集内创建表

SupeSite/X-Space官方站,h4L N$]V,V7p7LH"Z

本节将说明如何向数据集中添加表。SupeSite/X-Space官方站'Yq5P5C!T0LhQ

创建 Customers 表

  1. SupeSite/X-Space官方站BHS(H[

    在“服务器资源管理器”中展开您创建的数据连接,然后展开“表”节点。SupeSite/X-Space官方站 f%q Qt!{|~,u

  2. I au HZ's$T0将“Customers”表从“服务器资源管理器”中拖动到“数据集设计器”上。

    z(|C%G,lE0

    |Y)a ws Vvu4D0“Customers”数据表和“CustomersTableAdapter”被添加到数据集中。SupeSite/X-Space官方站.LZ%k9r[?(_k!g'W

创建 Orders 表

  • 0z$`?v*J$a'mZ"G0将“Orders”表从“服务器资源管理器”中拖动到“数据集设计器”上。

    x Hq X7a6o%t5`%s6A0 SupeSite/X-Space官方站:VREPD(SM*y*` }

    “Orders”数据表、“OrdersTableAdapter”以及“Customers”表与“Orders”表之间的数据关系将添加到数据集中。SupeSite/X-Space官方站;j'k#[${ uI

创建 OrderDetails 表

  • fCArC#Kc+|0将“Order Details”表从“服务器资源管理器”拖动到“数据集设计器”上。

    :aAi%@e?0

    *g3UOE"@6f_y F0“Order Details”数据表、“Order DetailsTableAdapter”以及“Orders”表与“Order Details”表之间的数据关系将添加到数据集中。

    +Y`8Se/qo!@2A:| g0

Collapse 图像后续步骤

在应用程序中添加功能

  • SupeSite/X-Space官方站hg?$O5ar

    刚刚创建的数据集即出现在“数据源”窗口中。在“数据源”窗口中选择项并将其拖动到窗体上。有关更多信息,请参见“显示数据”概述

    J!}l_A0
  • ^4DC6I1U}*A0向 TableAdapter 中添加更多查询。有关更多信息,请参见如何:创建 TableAdapter 查询

    'N+EO1~+wA%k0
  • SupeSite/X-Space官方站c:kSC,z xp,Y)\

    在该数据集中的数据表的 ColumnChangingRowChanging 事件中添加验证逻辑。有关更多信息,请参见数据验证概述SupeSite/X-Space官方站,]$E6N{;hn(r

6@[)W`S0数据验证是指确认要输入数据对象中的值是否遵从数据集架构内的约束,以及是否遵从为应用程序所建立的规则的过程。建议您在将更新信息发送到基础数据库前执行数据验证,这样可减少错误以及应用程序与数据库之间潜在的往返数据通信数。通过将验证检查内置到数据集本身,可以确认写入数据集的数据是有效的。无论如何执行更新(无论是由窗体中的控件直接执行,在组件中执行,还是以某种其他方式执行),数据集都可以检查数据。由于数据集是应用程序的一部分,所以它是生成应用程序特定验证的合理位置(而不像在数据库后端内置相同的检查)。

q(WC@jLj0
Note注意

d{'^!moI4YCc0要在应用程序中添加验证,建议您将其添加到程序集的分部类文件中。在 Visual Basic 或 Visual C# 中,打开“数据集设计器”并双击要为其创建验证的列或表。此操作自动创建 ColumnChangingRowChanging 事件处理程序。有关更多信息,请参见如何:在列更改过程中验证数据如何:在行更改过程中验证数据SupeSite/X-Space官方站9fe7k+Q.n Pe

验证数据

/M J/@'^?0数据集中的验证可以通过下列方式完成:

9|2^0BCCUgjk0
  • M9hE_;B*F;GrV8S0通过创建您自己的应用程序特定的验证,该验证可以在对单个数据列中的值进行更改期间检查数据。有关更多信息,请参见如何:在列更改过程中验证数据

    9p _|p,u%r+z0
  • SupeSite/X-Space官方站DA3W_AB`J+s.H

    通过创建您自己的应用程序特定的验证,该验证可以在整个数据行正在更改时对值进行更改期间检查数据。有关更多信息,请参见如何:在行更改过程中验证数据SupeSite/X-Space官方站p `$vtk~yBP*`

  • |*?S4D:HAc0创建关键字、唯一约束等,将其作为数据集实际架构定义的一部分。有关将验证包含到架构定义中的更多信息,请参见如何:将数据列设置为主键如何:将数据列局限于仅包含唯一的值SupeSite/X-Space官方站6r$v$a/TK(lG

  • 3n7pgaLC0通过设置 DataColumn 对象的属性,例如 MaxLengthAllowDBNullUnique

    ?T J"xed0
SupeSite/X-Space官方站(~1~N"[2wI1s

当在记录中发生更改时,DataTable 对象将会引发几个事件:

-izM3S8T!q2\Ym0
  • .PEpA\&\0每次更改单个列的过程中和其之后都会引发 ColumnChanging 和 ColumnChanged 事件。当要验证特定列中的更改时,ColumnChanging 事件比较有用。有关建议更改的信息将作为参数与事件一起传递。有关更多信息,请参见如何:在列更改过程中验证数据SupeSite/X-Space官方站z0e_2?.SFYi t

  • X?nul9u4|6E0在行中进行任何更改的过程中和其之后都会引发 RowChanging 和 RowChanged 事件。RowChanging 事件提供更为一般性的信息,因为它仅仅指示行中某处发生了更改,而您不知道哪一列已更改。有关更多信息,请参见如何:在行更改过程中验证数据

    P*bZP*Q'^#~FR0

*UV4|+Ht:Y'K0因此,在默认情况下,每次更改列将引发四个事件:首先是针对将被更改的特定列的 ColumnChanging 和 ColumnChanged 事件,然后是 RowChanging 和 RowChanged 事件。如果对行进行了多项更改,则将为每项更改引发这些事件。SupeSite/X-Space官方站 dJ2o|T&c {v

Note注意
SupeSite/X-Space官方站)Ooc8p)V'WRH8X

每次对单个列进行更改后,数据行的 BeginEdit 方法关闭 RowChanging 和 RowChanged 事件。这种情况下,在调用 EndEdit 方法之前将不会引发事件,此时只引发了一次 RowChanging 和 RowChanged 事件。有关更多信息,请参见如何:在填充数据集时关闭约束

Y4k7BFQ B-dEe?x0

4MR:e Y1aEZ Z}+[0您选择的事件取决于您希望验证具有的间隔尺寸。如果在更改列时立即捕获错误很重要,则应使用 ColumnChanging 事件生成验证。否则,应使用 RowChanging 事件,它可能会导致立即捕获多个错误。另外,如果按照数据的结构,将根据另一列的内容来验证一个列的值,则应该在 RowChanging 事件过程中执行验证。

]2f IE!e.X4V*Sl0 SupeSite/X-Space官方站$elu"G#xjj'zq8[4l'@

当更新记录时,DataTable 对象将引发事件,您可以在更改发生时和在更改完成后对这些事件作出响应。 SupeSite/X-Space官方站 {f y!@h[;k

SupeSite/X-Space官方站3m f;iR:gq:h

如果应用程序正在使用类型化数据集,则可以创建强类型的事件处理程序。这样将另外添加四种可为其创建处理程序的类型化事件:dataTableNameRowChangingdataTableNameRowChangeddataTableNameRowDeletingdataTableNameRowDeleted。这些类型化的事件处理程序会传递一个参数,它包含表的列名,使您可以更容易地读取和写入代码。

%H U*gwCL0

数据更新事件

事件 说明
SupeSite/X-Space官方站G4m_ rN$A?YlU

ColumnChanging SupeSite/X-Space官方站4`rk:q Nw

SupeSite/X-Space官方站*V.D6O@!~~n

正在更改列中的值。该事件向您传递行、列以及建议的新值。

Q YDa9t0
SupeSite/X-Space官方站(YP%l;ab9Qz#i|1y#~

ColumnChanged SupeSite/X-Space官方站q5{] bN$_8R J

iCE(JTVA0已更改列中的值。该事件向您传递行、列以及建议值。

Q1h j/Oz0
SupeSite/X-Space官方站2~R~;pWgr@ ~wU

RowChanging SupeSite/X-Space官方站I'h*Ug;y%R

SupeSite/X-Space官方站m |BO,qe B4s ~

DataRow 对象作出的更改将要提交回数据集。如果尚未调用 BeginEdit 方法,那么紧接着引发 ColumnChanging 事件之后,对列的每一更改都将引发 RowChanging 事件。如果在执行更改前确实调用了 BeginEdit,则仅当调用 EndEdit 方法时,才会引发 RowChanging 事件。

H5T }*n3_!AC X?go0

6Z~?;I+R*N%G0该事件向您传递此行和一个值,该值指示正在执行的操作类型(更改、插入等)。SupeSite/X-Space官方站6Q jp-]w

SupeSite/X-Space官方站!EyY8E8_ v-o.E@|R

RowChanged

-jyp7|_-^&{0

Y(v cUp0已更改行。该事件向您传递此行和一个值,该值指示正在执行的操作类型(更改、插入等)。

't.m'K1{{G Ek0

"] `;W.E#^5O5Xd!JXhl0RowDeleting

Je'OG+T~/VA;w7T0
SupeSite/X-Space官方站*xy~&E9QA ZB

正在删除行。该事件向您传递此行和一个值,该值指示正在执行的操作类型(删除)。

eZM@L*u@/T0

%X@X6K]eP\0RowDeleted SupeSite/X-Space官方站5_~?"Rb-c

;x(iyod X)H2j$o0已删除行。该事件向您传递此行和一个值,该值指示正在执行的操作类型(删除)。

"G_I8s O \-k#T0

Xx3I4oWk m0在更新过程中引发 ColumnChanging、RowChanging 和 RowDeleting 事件。您可以使用这些事件来验证数据或执行其他类型的处理。由于在这些事件过程中更新正在进行,所以您可以通过引发异常(它将阻止更改完成)来取消更新。

ggBIKD\`0

%u n"}(C&?Gc I b0ColumnChanged、RowChanged 和 RowDeleted 事件是在更新成功完成后引发的通知事件。当您需要基于成功的更新来执行进一步操作时,这些事件将十分有用。

F{\unuk C7z0

5T+B2X(H ]e4W6UvTF0


SupeSite/X-Space官方站9J g"GY9En

i%h!F@ AG2v,B?2tx G0验证数据是检查输入到应用程序数据中的值的过程。建议在将更新发送到基础数据存储区之前对值进行检查,这样可以减少应用程序和数据存储区之间潜在的往返行程量。SupeSite/X-Space官方站x1CKL EvojI

Note注意

b,w!uK"eMeV"f@2F0“数据集设计器”创建一个可以在其中将验证逻辑添加到数据集的分部类。设计器生成的数据集不会删除或更改该分部类中的任何代码。有关更多信息,请参见如何:扩展数据集的功能SupeSite/X-Space官方站)sUiOk*x

2\W;{.s)A0u0在数据列中的值发生更改时,可以通过响应 ColumnChanging 事件对数据进行验证。引发此事件时,此事件将传递一个事件参数 (ProposedValue),此事件参数中包含为当前列建议的值。根据 e.ProposedValue 的内容,您可以采取以下操作:

T-a!{2w$kx0
  • SupeSite/X-Space官方站s8a]*^;n

    接受建议的值,不采取任何措施。

    8{OY%n)?c NT0
  • SupeSite/X-Space官方站\+PX.J q!zEr

    从 ColumnChanging 事件处理程序内设置列错误 (SetColumnError),从而拒绝建议的值。SupeSite/X-Space官方站+]2ay?tMsKMB

  • SupeSite/X-Space官方站JWd n `1@E.jQ

    还可以使用 ErrorProvider 控件向用户显示一条错误信息。有关更多信息,请参见 ErrorProvider 组件(Windows 窗体)SupeSite/X-Space官方站o8[w0@P4W

SupeSite/X-Space官方站 L%\ D4P^rs8r

也可以在 RowChanging 事件期间执行验证。有关更多信息,请参见如何:在行更改过程中验证数据

y m5d0o)o5Cw2VV$r O0

列值更改时对数据进行验证

  1. SupeSite/X-Space官方站Q rd%ug5`K

    在“数据集设计器”中打开您的数据集。有关更多信息,请参见如何:在数据集设计器中打开数据集

    j0cDR~4NcA0
  2. SupeSite/X-Space官方站i%HE"Z+}"^*l8Ub/b6N*{

    双击要验证的列。此操作将创建 DataTable 的 ColumnChanging 事件处理程序。SupeSite/X-Space官方站'I#d:y[4@!C'I:b`$w9{

    Note注意

    8by u'wXyA]+A0“数据集设计器”并不自动为此 C# 事件创建事件处理程序。处理此事件所需的代码包含在下面。SupeSite/X-Space官方站bX%X:E k\;z

  3. !j;Y}A.}_6fcC0添加代码以验证 e.ProposedValue 中包含的数据是否满足您应用程序的要求。如果建议的值不可接受,则对该列进行设置,以指示其包含一个错误。SupeSite/X-Space官方站AiI(C [O,@

    q%LXw%dr(Xf0下面的代码示例在 Quantity 列为 0 或更小时将设置列错误。ColumnChanging 事件处理程序应该与以下所示类似:

    ~-U2b o;T1}2{0

Hg,g)F-b$Hh8E;pA1{0

Visual Basic 
Private Sub Order_DetailsDataTable_ColumnChanging(ByVal sender As System.Object, ByVal e As System.Data.DataColumnChangeEventArgs) _
    Handles Me.ColumnChanging

    If (e.Column.ColumnName = Me.QuantityColumn.ColumnName) Then

        If CType(e.ProposedValue, Short) <= 0 Then
                e.Row.SetColumnError(e.Column, "Quantity must be greater than 0")
            Else
                e.Row.SetColumnError(e.Column, "")
        End If
    End If
End Sub

SupeSite/X-Space官方站	PE^vckZ*s%us

验证数据是检查输入到应用程序数据中的值的过程。建议在将更新发送到基础数据存储区之前对值进行检查,这样可以减少应用程序和数据存储区之间潜在的往返行程量。

9PN%LlhR |^ g#}0
Note注意

D |.M%N;jf'_+p;TN0“数据集设计器”创建一个可以在其中将验证逻辑添加到数据集的分部类。设计器生成的数据集不会删除或更改该分部类中的任何代码。SupeSite/X-Space官方站[Y%iy-I7]

6}Sx"TM-Ci c0g0通过响应 RowChanging 事件,可以在数据行中的值发生更改时对数据进行验证。引发该事件时,该事件向会传递一个事件参数 (e.Row),此参数中包含当前行中每个列的建议值。根据 e.Row 中每列的内容,可以进行以下操作:SupeSite/X-Space官方站)y#[5S`@U^^#u?^

  • $KUP;f3`#~/J{u z K0接受建议的值,不采取任何措施。

    ^"s#I$^U'NA u0
  • SupeSite/X-Space官方站;x)c3U]xB/{q

    从行更改事件处理程序内设置列错误 (SetColumnError),从而拒绝建议的值。SupeSite/X-Space官方站 Mwa\n _

  • SupeSite/X-Space官方站PI ^ `5UXH'w1}?

    还可以使用 ErrorProvider 控件向用户显示一条错误信息。有关更多信息,请参见 ErrorProvider 组件(Windows 窗体)

    $\Vp+G6w j$Q)~ SE+We0
SupeSite/X-Space官方站+l(C9`(r7Tsq op;`\

也可以使用 ColumnChanging 事件在更改单个列时执行验证。有关更多信息,请参见如何:在列更改过程中验证数据SupeSite/X-Space官方站,CN8|F2o&d

在 RowChanging 事件中验证数据

3kX7}Dl8l/H0您可以编写代码,以验证每个要验证的列中包含的数据是否满足应用程序的要求。如果建议的值不可接受,则对该列进行设置,以指示其包含一个错误。以下的示例将在 Quantity 列为 0 或更小时设置列错误。RowChanging 事件处理程序应与以下的示例类似。

!X^D)AG}{-vcu0

行更改时验证数据 (Visual Basic)

  1. {m`9@mU4~0在“数据集设计器”中打开您的数据集。有关更多信息,请参见如何:在数据集设计器中打开数据集SupeSite/X-Space官方站MF`1|l:GMD6x

  2. SupeSite/X-Space官方站'} ` Hca)|9v

    双击要验证的表的标题栏。此操作将自动在数据集的分部类文件中创建 DataTable 的 RowChanging 事件处理程序。

    J)~0|3\A Rl-?0
SupeSite/X-Space官方站5v%iD!w!T$sN

Visual Basic 
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging(ByVal sender As System.Object, _
    ByVal e As Order_DetailsRowChangeEvent) Handles Me.Order_DetailsRowChanging

    If CType(e.Row.Quantity, Short) <= 0 Then
        e.Row.SetColumnError("Quantity", "Quantity must be greater than 0")
    Else
        e.Row.SetColumnError("Quantity", "")
    End If
End Sub

TAG: 学习

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

数据统计

  • 访问量: 18921
  • 日志数: 58
  • 图片数: 13
  • 文件数: 9
  • 书签数: 17
  • 建立时间: 2006-05-13
  • 更新时间: 2007-01-06

RSS订阅

Open Toolbar