2014-03-31 29 views
0

我的網頁由GridView組成,它允許用戶查看,編輯和插入數據。數據使用DetailView-Form插入,該窗體通過一個javaScript類型的窗口打開。 GridView中的一列包含一個company_guid,它通過在登錄頁面中設置的會話捕獲。我試圖捕獲用戶的company_guid,並在插入數據時將其記錄到網格中。我能夠查看和編輯Gridview,但當我嘗試插入時出現以下錯誤:必須聲明標量變量「@companyguid」插入Gridview時必須聲明標量變量錯誤

以下是我的超文本 - 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 [email protected]_Name, 
    [email protected]_Desc, [email protected], [email protected], [email protected] 
    WHERE [email protected]_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 

我可以請我得到一些幫助,以瞭解我做錯了什麼?

回答

1

降@這一行:寫入查詢指示查詢參數時,才需要

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

@。

如果您仍然需要@,我認爲您需要在您的asp:SqlDataSource元素下聲明< InsertParameters>元素。

選項#1

,你可以直接聲明基於會話的插入參數如下:

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

選項#2

您還可以設置公司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; 
} 
+0

我放棄了@以反映如下(我修改的代碼片段在我原來的職位):SqlDataSource1.InsertParameters.Add( 「companyguid」,companyGuid)...但我仍然收到相同的錯誤消息。如果您有任何其他建議,請告訴我。謝謝 – user1724708

+0

增加了更多的選項給我的答案。請嘗試。 –

+0

感謝您的時間 - 選項2解決了這個問題 – user1724708