Web服务中的dataSet

时间:2010-02-18 10:23:19

标签: c# .net vb.net asmx

我正在使用UltraGrid在表中插入数据。问题是我需要使用Web服务进行插入,更新,删除。我从Web服务获取dataSet并将其显示到网格中但是当我对网格进行一些更改(例如插入或更新数据)时,我还需要将新的dataSet发送到Web服务,以便Web服务更新数据。

这是表格 ID(PK,int,not null) 名称(nvarchar 100,null)

这是客户端的代码:

Public Sub Refresh()
    Dim p As localhost.Service1 = New localhost.Service1
   'bind datatable to UltraGrid 
    UltraGrid1.DataSource = p.GetData()
    End Sub

这是从表中获取数据的Web服务代码:

<WebMethod()> Public Function GetData() As DataSet
    Dim custDA As SqlDataAdapter = New SqlDataAdapter("SELECT  ID,Name FROM Btable", nwindConn)
    Dim custDS As DataSet = New DataSet()
    custDA.MissingSchemaAction = MissingSchemaAction.AddWithKey
    custDA.Fill(custDS, "Btable")
    GetData= custDS
End Function

这一切正常但现在我想将新行插入网格并将其发送到Web服务并从那里插入。我怎么能这样做?谢谢!

1 个答案:

答案 0 :(得分:1)

您应该处理UltraTable的事件“AfterRowInsert”并从新行检索值。然后,您可以在Web服务上调用一个新的Web方法,将该行插入数据库。

网络方法可能看起来像这样......

<WebMethod()> Public sub AddRecord(id as integer, name as string)

dim sSql as string = "INSERT INTO Btable (ID, Name) VALUES (@ID, @Name)"    
Dim oCmd as SqlCommand = nwindConn.CreateCommand()
oCmd.CommandText = sSql
oCmd.Parameters.Add("@ID", SqlDbType.Int).Value = id
oCmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = name
oCmd.ExecuteNonQuery()

End Function 

如果您的ID列是自动编号,则会略有不同。在这种情况下,您的Web方法只接受名称参数,并返回新记录的ID。在MS SQL Server中,您可以通过在INSERT查询后调用SCOPE_IDENTITY()来获取此信息。