2014-10-10 35 views
-1

我已經使用了GridView控件,並在更新(LinkBut​​ton)上執行代碼。 我已經使用了ObjectDataSource。 我是初學者。請解釋一下。在GridView中獲取異常

獲取錯誤- 現在出現此錯誤 - 參數化查詢'(@pname varchar(7),@ pgender varchar(8000),@ pcity varchar(8),@ pid'期望參數'@pgender',但未提供 -

這裏是behind-

public static int UpdateEmployee(int id, string name, string gender, string city) 
{ 
    string connection = "Data Source=SRM-318;Initial Catalog=employee;User ID=sa;Password=****"; 

    SqlConnection scon = new SqlConnection(connection); 

     string updateQuery = "update emp SET [email protected], [email protected], [email protected] WHERE [email protected]"; 
    SqlCommand scmd = new SqlCommand(updateQuery, scon); 

    scmd.CommandType = CommandType.Text; 

    scmd.Parameters.Add("@pname", SqlDbType.VarChar).Value = name; 
    scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = gender; 
    scmd.Parameters.Add("@pcity", SqlDbType.VarChar).Value = city; 
    scmd.Parameters.Add("@pid", SqlDbType.Int).Value = id; 

    scon.Open(); 
    return scmd.ExecuteNonQuery(); 
} 

代碼........................... .................................................. ............ 參見設計頁面的代碼 -

<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" 
     BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
     CellPadding="3" DataKeyNames="id" DataSourceID="ObjectDataSource1" ShowFooter="True" 
     GridLines="Vertical" > 
     <RowStyle BackColor="#EEEEEE" ForeColor="#8C4510" /> 
     <Columns> 
      <asp:TemplateField ShowHeader="False"> 
       <ItemTemplate> 
        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" 
         Text="Edit"></asp:LinkButton> 
        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete" 
         Text="Delete"></asp:LinkButton> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" 
         Text="Update"></asp:LinkButton> 
        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" 
         Text="Cancel"></asp:LinkButton> 
       </EditItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="id" SortExpression="id"> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label> 
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:LinkButton ID="lb" OnClick="lb_Click" ValidationGroup="INSERT" runat="server">Insert</asp:LinkButton> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="name" SortExpression="name"> 
       <ItemTemplate> 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("name") %>'></asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>'></asp:TextBox> 
        <asp:RequiredFieldValidator ID="rfvEditName" ControlToValidate="TextBox1" runat="server" 
         Text="*" ErrorMessage="Name is Required" ForeColor="Red"></asp:RequiredFieldValidator> 
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="tbname" runat="server"></asp:TextBox> 
        <asp:RequiredFieldValidator ID="rfvInsertName" ValidationGroup="INSERT" ControlToValidate="tbname" 
         runat="server" Text="*" ErrorMessage="Name is Required" ForeColor="Red"></asp:RequiredFieldValidator> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="gender" SortExpression="gender"> 
       <ItemTemplate> 
        <asp:Label ID="Label3" runat="server" Text='<%# Bind("gender") %>'></asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:DropDownList ID="DropDownList1" runat="server"> 
         <asp:ListItem>Select Gender</asp:ListItem> 
         <asp:ListItem>Male</asp:ListItem> 
         <asp:ListItem>Female</asp:ListItem> 
        </asp:DropDownList> 
        <asp:RequiredFieldValidator ID="rfvEditGender" ControlToValidate="DropDownList1" 
         runat="server" Text="*" ErrorMessage="Gender is Required" ForeColor="Red" InitialValue="Select Gender"></asp:RequiredFieldValidator> 
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:DropDownList ID="DropDownList2" runat="server"> 
         <asp:ListItem>Select Gender</asp:ListItem> 
         <asp:ListItem>Male</asp:ListItem> 
         <asp:ListItem>Female</asp:ListItem> 
        </asp:DropDownList> 
        <asp:RequiredFieldValidator ID="rfvInsertGender" ValidationGroup="INSERT" ControlToValidate="DropDownList2" 
         runat="server" Text="*" ErrorMessage="Gender is Required" ForeColor="Red" InitialValue="Select Gender"></asp:RequiredFieldValidator> 
       </FooterTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="city" SortExpression="city"> 
       <ItemTemplate> 
        <asp:Label ID="Label4" runat="server" Text='<%# Bind("city") %>'></asp:Label> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("city") %>'></asp:TextBox> 
        <asp:RequiredFieldValidator ID="rfvEditCity" ControlToValidate="TextBox3" runat="server" 
         Text="*" ErrorMessage="City is Required" ForeColor="Red"></asp:RequiredFieldValidator> 
       </EditItemTemplate> 
       <FooterTemplate> 
        <asp:TextBox ID="tbcity" runat="server"></asp:TextBox> 
        <asp:RequiredFieldValidator ID="rfvInsertCity" ValidationGroup="INSERT" ControlToValidate="tbcity" 
         runat="server" Text="*" ErrorMessage="City is Required" ForeColor="Red"></asp:RequiredFieldValidator> 
       </FooterTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <FooterStyle BackColor="#CCCCCC" ForeColor="#8C4510" /> 
     <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" BackColor="#999999" /> 
     <SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" /> 
     <HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" /> 
     <AlternatingRowStyle BackColor="#DCDCDC" /> 
    </asp:GridView> 
    <asp:ValidationSummary ValidationGroup="INSERT" ID="ValidationSummary1" ForeColor="Red" 
     runat="server" /> 
    <asp:ValidationSummary ID="ForGridViewValidations" runat="server" /> 
    <br /> 
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
     InsertMethod="InsertEmployee" SelectMethod="GetAllEmployee" TypeName="EmployeeDataAccessLayer" 
     UpdateMethod="UpdateEmployee" DeleteMethod="DeleteEmployee"> 
     <DeleteParameters> 
      <asp:Parameter Name="id" Type="Int32" /> 
     </DeleteParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="id" Type="Int32" /> 
      <asp:Parameter Name="name" Type="String" /> 
      <asp:Parameter Name="gender" Type="String" /> 
      <asp:Parameter Name="city" Type="String" /> 
     </UpdateParameters> 
     <InsertParameters> 
      <asp:Parameter Name="name" Type="String" /> 
      <asp:Parameter Name="gender" Type="String" /> 
      <asp:Parameter Name="city" Type="String" /> 
     </InsertParameters> 
    </asp:ObjectDataSource> 
</div> 
</form> 

+2

您正在使用'SqlCommand'參數。但是,你已經將參數從c#變量傳遞到了命令中?請參閱:http://msdn.microsoft.com/pl-pl/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx – 2014-10-10 07:03:25

+0

從Gridview TextBoxes我已通過。 – user2096592 2014-10-10 07:05:01

回答

1

您還沒有傳遞參數namegendercityid你的命令。

它應該像

scmd.Parameters.Add["@name", SqlDbType.VarChar]; 
scmd.Parameters["@name"].Value = name; 

+0

請再次查看我的代碼。 – user2096592 2014-10-10 07:12:32

+0

@ user2096592你已經編輯了你的代碼,但是你寫的代碼甚至不會編譯,因爲你在添加它時沒有在'@ name'和其他參數名稱周圍加引號。 – 2014-10-10 07:14:58

+0

我編輯過。 (@pname varchar(7),@ pgender varchar(8000),@ pcity varchar(8),@ pid'期望參數'@pgender',它沒有被提供 - – user2096592 2014-10-10 07:35:47

2

您應該添加sqlCommand參數。

ccmd.Parameters.AddWithValue("@name", value of name); 
ccmd.Parameters.AddWithValue("@city", value of city); 
ccmd.Parameters.AddWithValue("@gender", value of gender); 
ccmd.Parameters.AddWithValue("@id", value of id); 
+0

他已經添加了他們(我想OP在你發佈你的答案後編輯了這個問題)。 – 2014-10-10 07:10:56

+0

使用'AddWithValue'並不是一個好主意,因爲它帶來了很多問題。請參閱http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ – 2014-10-10 07:10:59

1

它應該是這樣的:

public static int UpdateEmployee(int id, string name, string gender, string city) 
{ 
    string connection = "Data Source=SRM-318;Initial Catalog=employee;User ID=sa;Password=****"; 

    SqlConnection scon = new SqlConnection(connection); 

    string updateQuery = "update emp SET [email protected], [email protected], [email protected] WHERE [email protected]"; 
    SqlCommand scmd = new SqlCommand(updateQuery, scon); 

    scmd.CommandType = CommandType.Text; 

    scmd.Parameters.Add("@pname", SqlDbType.VarChar).Value = name; 

    // Edit Starts 
    if (!String.IsNullOrEmpty(gender)) 
    { 
     scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = gender; 
    } 
    else 
    { 
     scmd.Parameters.Add("@pgender", SqlDbType.VarChar).Value = DBNull.Value; 
    } 
    // Edit Ends 

    scmd.Parameters.Add("@pcity", SqlDbType.VarChar).Value = city; 
    scmd.Parameters.Add("@pid", SqlDbType.Int).Value = id; 

    scon.Open(); 
    return scmd.ExecuteNonQuery(); 
} 
+0

再見,先生,仍然出錯。我更新了代碼 – user2096592 2014-10-10 07:09:23

+0

我使用了你的代碼。現在得到這個錯誤 - 參數化查詢'(@pname varchar(7),@ pgender varchar(8000),@ pcity varchar(8),@ pid'期望參數'@pgender',它沒有被提供。 – user2096592 2014-10-10 07:33:28

+0

仍獲得相同的錯誤。 – user2096592 2014-10-10 07:45:46