【问题标题】:Must declare the scalar variable error when inserting into Gridview插入 Gridview 时必须声明标量变量错误
【发布时间】:2014-03-31 18:25:55
【问题描述】:

我的网页包含一个 GridView,它允许用户查看、编辑和插入数据。使用 DetailView-Form 插入数据,该表单通过 javaScript 类型的窗口打开。 GridView 中的一列包含一个 company_guid,它是通过在登录页面中设置的会话捕获的。我正在尝试捕获用户的 company_guid 并在插入数据时将其记录到网格中。我可以查看和编辑 Gridview,但尝试插入时出现以下错误:必须声明标量变量“@companyguid”

以下是我的超文本 - GridView:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="Part_ID" DataSourceID="SqlDataSource1"  
     AutoGenerateEditButton="True" AllowPaging="True" AllowSorting="True">
     <Columns>
        <asp:BoundField DataField="Part_ID" HeaderText="Part_ID" 
             SortExpression="Part_ID" InsertVisible="False" ReadOnly="True" Visible="false" />

        <asp:BoundField DataField="Company_guid" HeaderText="Company_guid" 
             SortExpression="Company_guid" Visible="false"  />

         <asp:BoundField DataField="Part_Name" HeaderText="Part_Name" 
             SortExpression="Part_Name" />
         <asp:BoundField DataField="Part_Desc" HeaderText="Part_Desc" 
             SortExpression="Part_Desc" />

         <asp:CheckBoxField DataField="Active" HeaderText="Active" 
             SortExpression="Active" />

        <asp:BoundField DataField="UpdateDate" HeaderText="UpdateDate" 
             SortExpression="UpdateDate" />

         <asp:BoundField DataField="UpdateBy" HeaderText="UpdateBy" 
             SortExpression="UpdateBy" />

     </Columns>
    </asp:GridView> 

详细视图(这是通过 JavaScript 窗口打开的):

<asp:DetailsView
        id="dtlCarrier"
        DataSourceID="SqlDataSource1"
        AutoGenerateInsertButton="True"
        AutoGenerateRows="False"
        DefaultMode="Insert"
        Runat="server" DataKeyNames="Part_ID">
        <Fields>
           <asp:BoundField DataField="Part_Name" HeaderText="Part_Name" 
                SortExpression="Part_Name" />
            <asp:BoundField DataField="Part_Desc" HeaderText="Part_Desc" 
                SortExpression="Part_Desc" />

              <asp:CheckBoxField
            DataField="Active"
            HeaderText="Active" SortExpression="Active" />

            <asp:BoundField DataField="UpdateDate" HeaderText="UpdateDate" 
                SortExpression="UpdateDate" />
            <asp:BoundField DataField="UpdateBy" HeaderText="UpdateBy" 
                SortExpression="UpdateBy" />

        </Fields>
    </asp:DetailsView> 



<!-- the sql data source -->  
    <asp:SqlDataSource 
    ID="SqlDataSource1" 
    ConnectionString="<%$ ConnectionStrings:ShipperNotificationConnectionString %>" 
    SelectCommand="SELECT * FROM [Part]"
    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" 
        />

背后的代码:

Public Class SupplierPartsMgmt
    Inherits System.Web.UI.Page

    'Globally declare my variable to hold the company_guid
    Dim companyGuid As String = ""

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'initialized companyGuid to the session varible, which is capured/stored via the log-in pg
        If Not Page.IsPostBack Then
            companyGuid = Session("numrecord").ToString
        Else
            companyGuid = Session("numrecord").ToString
        End If

    End Sub

    Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
        'Dim companyGuid As String = ""

        If Not String.IsNullOrEmpty(companyGuid) Then
            SqlDataSource1.InsertParameters.Add("companyguid", companyGuid)
            SqlDataSource1.Insert()
        End If
    End Sub

End Class

能否请我帮忙看看我做错了什么?

【问题讨论】:

    标签: asp.net vb.net gridview


    【解决方案1】:

    在这一行去掉@:

    SqlDataSource1.InsertParameters.Add("companyguid", companyGuid)
    

    @ 仅在编写查询以指示查询参数时才需要。

    如果您仍然需要 @,我认为您需要在 asp:SqlDataSource 元素下声明 InsertParameters> 元素。

    选项#1

    您可以直接声明基于会话的插入参数,如下所示:

    <InsertParameters>
       <asp:SessionParameter Name="companyguid" SessionField="companyguid" Type="String" />
    </InsertParameters>
    

    选项 #2

    您也可以在oninserting命令中设置公司guid参数值如下:

    <InsertParameters>
       <asp:Parameter Name="companyguid" Type="String" />
    </InsertParameters>
    

    OnInserting="On_Inserting" - 将此属性添加到您的 SQL 数据源

    protected void On_Inserting(Object sender, SqlDataSourceCommandEventArgs e) 
    {
        e.Command.Parameters["@companyguid"].Value = valueFromSession;
    }
    

    【讨论】:

    • 我删除了 @ 以反映以下内容(我在原始帖子中修改了代码 sn-p): SqlDataSource1.InsertParameters.Add("companyguid", companyGuid) ...但我仍然得到同样的错误信息。如果您有任何其他建议,请告诉我。谢谢
    • 为我的回答添加了更多选项。请尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多