【发布时间】:2014-07-18 02:55:43
【问题描述】:
我的应用程序包含一个 GridView,它允许用户通过 SqlDataSource 控件编辑、更新和插入与汽车零件相关的数据。当用户输入零件时,该零件可供所有用户查看,我只希望用户看到他或她输入的汽车零件。
该应用程序可通过登录页面访问,该页面捕获每个用户的 company_guid 并将其存储在会话中,用户的 company_guid 也与提交的零件信息一起被捕获/插入到数据库表中:
…背后的代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'initialized companyGuid to the session variable, which is captured/stored via the log-in pg
If Not Page.IsPostBack Then
companyGuid = Session("numrecord").ToString
Else
companyGuid = Session("numrecord").ToString
End If
End Sub
...我的 SqlDataSource 是这样设置的:
<asp:SqlDataSource OnInserting="On_Inserting"
ID="SqlDataSource1"
ConnectionString="<%$ ConnectionStrings:ShipperNotificationConnectionString %>"
SelectCommand="SELECT * FROM [Part] WHERE Company_guid=@companyguid "
UpdateCommand="UPDATE Part SET Part_Name=@Part_Name,
Part_Desc=@Part_Desc, Active=@Active, UpdateDate=@UpdateDate, UpdateBy=@UpdateBy
WHERE Part_ID=@Part_ID"
InsertCommand="INSERT Part (Company_guid,Part_Name,Part_Desc,Active,UpdateDate,UpdateBy)
VALUES (@companyguid,@Part_Name,@Part_Desc,@Active,@UpdateDate,@UpdateBy)"
runat="server">
<SelectParameters>
<asp:SessionParameter Name="companyguid" SessionField="companyguid" Type="String" />
</SelectParameters>
<InsertParameters>
<asp:SessionParameter Name="companyguid" SessionField="companyguid" Type="String" />
</InsertParameters>
</asp:SqlDataSource>
...后面的代码 - 事件处理程序:
Protected Sub On_selectedIndex(ByVal sender As [Object], ByVal e As SqlDataSourceCommandEventArgs)
e.Command.Parameters("@companyguid").Value = Session("numrecord").ToString
End Sub
...这是 SQL 测试查询:
SELECT *
FROM Part
WHERE company_guid = '19595A5C-98B9-4F5E-84F9-0000000'
...如何在我的 SqlDataSource 中设置 select 语句,以便用户只能看到他或她输入的部分?在 SqlDataSource - SelectCommand 中,我尝试了以下操作:
SelectCommand="SELECT * FROM [Part] WHERE company_guid = @company_guid"
...并收到错误 - 必须声明标量变量“@company_guid”。 我能得到一些指导吗?
【问题讨论】:
-
SqlDatasource糟透了。不是为更复杂的事情而设计的。您需要在 Select 命令中添加参数。 -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
标签: asp.net sql-server vb.net