[英]ASP.NET/VB.NET problem solving help!
有需要幫助的問題。 基本上,我要開發一個表格(是更大的Web應用程序的一部分),該表格列出了很多客戶,並列出了業務聯系人,技術聯系人1和技術聯系人2。
這個想法是快速數據輸入。 因此,一種形式會在下拉列表中顯示每個客戶及其聯系人,我可以更改每個客戶,然后單擊“保存”按鈕進行批量保存。
該數據庫如下所示:
tblClient
客戶編號
客戶名稱
業務聯系
技術1
科技2
我的想法是使用中繼器來格式化數據,如下所示:
客戶
業務聯系
技術1
科技2
客戶2
業務聯系
技術1
科技2
我所堅持的是如何進行批量更新? 我可以對Repeater1中的每個項目執行類似的操作,然后執行更新SQL語句嗎? 瓊斯
如果您使用VS中的GUI工具通過DataAdaptor構建數據源並將其掛鈎到gridview中,則將為您編寫所有代碼,而不是在保存按鈕上調用update。
手動方法是將數據格式化為XML塊並將其傳遞給存儲過程,然后您可以在其中創建一個UPDATE語句,該語句將JOINS加入XML以一次完成更新。
您要創建的XML類似於:
<ClientData>
<Client ClientID="1" BusinessContact="..." Tech1="..." Tech2="..." />
<Client ClientID="2" ... />
...
</ClientData>
一種創建方法是使用XmlWriter並在轉發器上循環以收集數據。 在VB.NET中:
Dim stream As New System.IO.MemoryStream
Dim settings As New System.Xml.XmlWriterSettings
settings.Encoding = Encoding.GetEncoding("iso-8859-1") 'This encoding handles special characters pasted in from MS Word
Dim writer As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(stream, settings)
With writer
.WriteStartElement("ClientData")
For Each item As RepeaterItem In myRepeater.Items
.WriteStartElement("Client")
.WriteAttributeString("ClientId", CType(item.FindControl("ClientIdHidden"), HtmlInputHidden).Value)
.WriteAttributeString("BusinessContact", CType(item.FindControl("BusinessContact"), TextBox).Text)
...
.WriteEndElement()
Next
.WriteEndElement()
.Flush()
End With
Dim xmlString As String = writer.Settings.Encoding.GetString(stream.ToArray())
然后創建一個帶有參數的存儲過程,您可以在其中傳遞XML:
CREATE PROCEDURE [dbo].[BulkUpdateClients]
(
@xmlInput AS text
)
AS
DECLARE @xmlHandle int
EXEC sp_xml_preparedocument @xmlHandle output, @xmlInput
UPDATE c
SET
BusinessContact = x.BusinessContact,
Tech1 = x.Tech1,
Tech2 = x.Tech2
FROM tblClient c
JOIN
(
SELECT
ClientId,
BusinessContact,
Tech1,
Tech2
FROM
OPENXML (@xmlHandle, '/ClientData/Client', 1)
WITH
(
ClientId int,
BusinessContact varchar(50),
Tech1 varchar(50),
Tech2 varchar(50)
)
) x ON c.ClientId = x.ClientId
上面的代碼尚未經過測試,但我認為這里存在通用模式。 我在很多場合都使用這種技術進行批量插入。 我喜歡它,因為它可以在單個數據庫操作中完成工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.