簡體   English   中英

ASP.NET/VB.NET問題解決幫助!

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM