使用SQLDataSource时声明标量变量

时间:2014-07-17 14:47:50

标签: asp.net sql-server vb.net

我的应用程序包含一个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;。 我能得到一些指导吗?

2 个答案:

答案 0 :(得分:0)

如果在SELECT quert上指定占位符@company_guid,则需要创建相对SelectParameter,如here所述。 根据您可以从中获取值的位置,您必须使用正确类型的参数。

由于您正在使用会话,因此可以尝试SessionParameter

您可以申请

Here is the complete list of Parameter类型。

答案 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"/>