我的应用程序包含一个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"
...并收到错误 - 必须声明标量变量&#34; @ company_guid&#34;。 我能得到一些指导吗?
答案 0 :(得分:0)
如果在SELECT quert上指定占位符@company_guid,则需要创建相对SelectParameter,如here所述。 根据您可以从中获取值的位置,您必须使用正确类型的参数。
由于您正在使用会话,因此可以尝试SessionParameter。
您可以申请答案 1 :(得分:0)
您已设置SelectParamters
,如下所示,其中包含我在代码中找不到的名为companyguid
的会话字段,而是将其声明为@companyguid
< / p>
<SelectParameters>
<asp:SessionParameter Name="companyguid" SessionField="companyguid" Type="String" />
</SelectParameters>
请更改您的PageLoad
,如下所示
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Session("companyguid") = Session("numrecord").ToString
End Sub
或者更改您选择参数以直接使用SessionField="numrecord"
。
最好为DefaultValue="your default company gui id"
设置<asp:SessionParameter
,以便如果由于某种原因未设置会话值,则使用默认数据填充gridview。您的SessionParameter变为
<asp:SessionParameter Name="companyguid" SessionField="companyguid" DefaultValue="19595A5C-98B9-4F5E-84F9-0000000"/>