[英]VB.net - Pass Custom Parameter in SQL Update Command
我正在使用帶有SQLDataSource選擇/插入/更新命令的Gridview。 它適合使用Gridview更新或更改值。 但是最近我添加了另一個使用Javascript檢索數據的插件,我需要將該檢索數據作為SQL的源數據。 有什么辦法可以做到嗎?
像這樣:
<form id="form1" runat="server">
<div>
<input type="hidden" id="newname" runat="server" />
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID_AM" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="StaffID" HeaderText="StaffID" SortExpression="StaffID" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [ID], [Name], [StaffID] FROM [Record]"
ConflictDetection="CompareAllValues"
UpdateCommand="UPDATE [Record] SET [Name] = @Name, [StaffID] = @StaffID WHERE [ID] = @original_ID AND (([Name] = @original_Name) OR ([Name] IS NULL AND @original_Name IS NULL)) AND (([StaffID] = @original_StaffID) OR ([StaffID] IS NULL AND @original_StaffID IS NULL))">
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="StaffID" Type="String" />
<asp:Parameter Name="original_ID" Type="Int32" />
<asp:Parameter Name="original_Name" Type="String" />
<asp:Parameter Name="original_StaffID" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
</div>
</form>
當我使用Gridview更新行時,插件將生成一個新名稱並將其存儲在隱藏的輸入“ newname.value”中。 如何將此值放入update參數?
我正在考慮幾種方法:
我假設您使用的是asp.net網絡表單,也就是說,沒有(簡單)的方法可以使服務器端的asp.net數據源與客戶端javascript保持接口,而無需基於javascript插件編寫自己的asp.net控件。
話雖這么說,我發現最簡單的方法是使用web方法。 如果您更喜歡使用Jquery,請參閱此鏈接 。 如果您希望asp.net做繁重的工作,請參閱此鏈接 。 我更喜歡鏈接2,所以這里是jist:
首先,您需要在頁面上添加一個scriptManager,它將“編寫” javascript函數以異步調用服務器端網絡方法,這將在您的aspx文件中:
<head runat="server">
<title></title>
<script type="text/javascript">
function HandleIT() {
var name = document.getElementById('<%=txtname.ClientID %>').value;
var address = document.getElementById('<%=txtaddress.ClientID %>').value;
PageMethods.ProcessIT(name, address, onSucess, onError);
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Something wrong.');
}
}
</script>
</head>
<div>
<p>Say bye-bey to Postbacks.</p>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<asp:TextBox ID="txtname" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="txtaddress" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnCreateAccount" runat="server" Text="Signup" OnClientClick="HandleIT(); return false;" />
</div>
這是網絡方法,(將在您的.aspx.vb文件中):
Imports System.Web.Services
<WebMethod> _
Public Shared Function ProcessIT(name As String, address As String) As String
Dim result As String = (Convert.ToString((Convert.ToString("Welcome Mr. ") & name) + ". Your address is '") & address) + "'."
Return result
End Function
您可以為每個sql查詢創建一個web方法,但是即使那樣,我也不認為您可以引用那些SqlDataSource對象。 您將需要使用另一種方式通過vb.net提取數據,然后從web方法返回該數據。
Web方法使用JSON來發送和接收對象,這意味着它們會為您從JSON序列化對象和反序列化對象。 我發現返回到javascript最兼容的對象類型是list(of dictionary(of string(object,)))),因此您的JSON如下所示:
[{"ID": 6, "Name":"sec0ndHand","StaffId" : "employeeOfTheMonth1"},{"ID": 3, "Name":"Tomy","StaffId" : "notEmployeeOfTheMonth1"}]
因此您的網絡方法最終看起來像這樣:
<WebMethod> _
Public Shared Function ProcessIT(name As String, address As String) As list(of dictionary(of string, object)))
Dim result As list(of dictionary(of string, object))) = New list(of dictionary(of string, object)))
'get/update/delete/insert your data
'convert your return object into list(of dictionary(of string, object)))
Return result
End Function
感謝您的回答。 后來,我找到了一種更簡單的方法,似乎更簡單,並且可以解決我的問題。
我只是在更新事件上添加參數:
Protected Sub SQL_Update(source As Object, e As SqlDataSourceCommandEventArgs) Handles SqlDataSource.Updating
dim staffid as string = newname.valie
// presudo for other passing values
e.Command.Parameters("@StaffID").Value = staffid
//and for other parameters
End Sub
然后可以在執行SQL更新之前添加這些自定義參數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.