接收DataTable
HttpRequest事件有个WriteDataTable方法,用于向客户端发送DataTable,语法为:
WriteDataTable(DataTable)
或
WriteDataTable(SelectString, ConnectionName)
DataTable | 要发送的一个现有DataTable |
SelectString | SelectString语句,据此生成一个DataTable发送给客户端。 |
ConnectionName | 数据源名称 |
对应的HttpClient有个GetDataTable方法,用于接收服务端发来的DataTable。
一个例子
1、服务端项目的HttpRequest事件代码:
Dim
Verified As
Boolean
If
e.PostValues.ContainsKey("username")
AndAlso e.PostValues.ContainsKey("password")
Then
'实际开发的时候,请改为根据用户表验证身份
Dim
username As
String = e.PostValues("username")
Dim password
As String
= e.PostValues("password")
If username
= "EP01" AndAlso
password = "888"
Then
Verified =
True
End
If
End
If
If
Verified = False
Then
e.AppendCookie("error","用户身份验证失败!")
'通过Cookie返回错误信息.
Return
End
If
Select
Case e.Path
Case "query.htm"
Dim
scd As
String = "select Top
100 * from
订单
Where
雇员
= '"
& e.PostValues("username")
& "'"
If e.PostValues.ContainsKey("filter")
Then
scd =
scd &
" and (" &
e.PostValues("filter")
& ")"
End If
e.WriteDataTable(scd,
"数据源名称")
End
Select
重要提示:
在合成表达式的时候,必要条件(只加载登录用户负责的的订单,这里是:雇员='EP01')和查询条件,必须按照以下格式合并:
必要条件 And (查询条件)
如果查询条件没有用括号括起来,那么用户可以很轻松地突破权限设置,获取所有数据。
2、在客户端项目新建一个窗口,插入一个Table和按钮,按钮的Click事件代码设置为:
Dim
hc As
New HttpClient("http://127.0.0.1/query.htm")
hc.FormData.Add("username","EP01")
hc.FormData.Add("password","888")
hc.FormData.Add("filter","产品='PD01'")
Dim
dt As
DataTable = hc.GetDataTable()
If
hc.rCookies.ContainsKey("error")
Then
MessageBox.show(hc.rCookies("error"),
"错误"
,MessageBoxButtons.OK,
MessageBoxIcon.Warning)
ElseIf
dt IsNot
Nothing Then
Tables("窗口1_Table1").DataSource
= dt
Else
MessageBox.Show("接收DataTable失败,原因未知!",
"错误" ,MessageBoxButtons.OK
,MessageBoxIcon.Warning)
End
If
打开窗口,单击按钮,Table控件即可显示从服务端获取的数据。