C# 如何使用存储过程更新gridview中的数据?
我试图使用存储过程更新网格视图中的数据,但出现错误: 不存在从对象类型System.Web.UI.WebControl.TextBox到已知托管提供程序本机类型的映射 存储过程:C# 如何使用存储过程更新gridview中的数据?,c#,asp.net,C#,Asp.net,我试图使用存储过程更新网格视图中的数据,但出现错误: 不存在从对象类型System.Web.UI.WebControl.TextBox到已知托管提供程序本机类型的映射 存储过程: CREATE PROCEDURE [dbo].[UpdateUser] @id int, @FirstName nvarchar(100) AS BEGIN UPDATE tblUsers SET FirstName = @FirstName WHERE id = @id
CREATE PROCEDURE [dbo].[UpdateUser]
@id int,
@FirstName nvarchar(100)
AS
BEGIN
UPDATE tblUsers
SET FirstName = @FirstName
WHERE id = @id
END
GO
代码
你能建议我如何解决这个错误吗
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" DataKeyNames="id" ForeColor="#333333" GridLines="None"
OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowDeleting="GridView1_RowDeleting" OnRowEditing="GridView1_RowEditing"
OnRowUpdating="GridView1_RowUpdating">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="id" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="First Name">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("FirstName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblFname" runat="server" Text='<%# Eval ("FirstName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Name">
<ItemTemplate>
<asp:Label ID="lblLname" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Address">
<ItemTemplate>
<asp:Label ID="lblAddress" runat="server" Text='<%#Eval("address") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Email">
<ItemTemplate>
<asp:Label ID="lblEmail" runat="server" Text='<%# Eval("Email") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Phone">
<ItemTemplate>
<asp:Label ID="lblPhone" runat="server" Text='<%# Eval("Phone") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<EditRowStyle BackColor="#7C6F57" />
<FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#E3EAEB" />
<SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F8FAFA" />
<SortedAscendingHeaderStyle BackColor="#246B61" />
<SortedDescendingCellStyle BackColor="#D4DFE1" />
<SortedDescendingHeaderStyle BackColor="#15524A" />
</asp:GridView>
您正在向查询传递一个
文本框
变量。如果您这样做,它应该可以工作:
cmd.Parameters.AddWithValue("@FirstName", FirstName.Text);
您正在向查询传递
文本框
变量。如果您这样做,它应该可以工作:
cmd.Parameters.AddWithValue("@FirstName", FirstName.Text);
问题是您正在将TextBox对象传递给AddWithValue方法。因为它只识别本机类型,所以会给出您看到的错误 您应该传递Textbox.Text值,而不是对象本身 将代码更改为如下所示:
cmd.Parameters.AddWithValue("@FirstName", FirstName.Text);
编辑1:
尝试更改此选项:
TextBox FirstName = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1");
为此:
TextBox FirstName = (TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("TextBox1");
问题是您正在将TextBox对象传递给AddWithValue方法。因为它只识别本机类型,所以会给出您看到的错误 您应该传递Textbox.Text值,而不是对象本身 将代码更改为如下所示:
cmd.Parameters.AddWithValue("@FirstName", FirstName.Text);
编辑1:
尝试更改此选项:
TextBox FirstName = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1");
为此:
TextBox FirstName = (TextBox)GridView1.Rows[GridView1.EditIndex].FindControl("TextBox1");
请尝试“cmd.Parameters.AddWithValue”(@FirstName”,FirstName.Text);”。您正在尝试发送控件而不是其内容。直到它显示相同的错误,然后您在其他地方执行相同的操作。如果在不使用
.Text
的情况下尝试您的代码,我会得到相同的错误,您的代码片段可以正常工作。重建项目了吗?请尝试“cmd.Parameters.AddWithValue”(@FirstName”,FirstName.Text);”。您正在尝试发送控件而不是其内容。直到它显示相同的错误,然后您在其他地方执行相同的操作。如果在不使用.Text
的情况下尝试您的代码,我会得到相同的错误,您的代码片段可以正常工作。你重建项目了吗?@LoveAajkal你能分享GridView的代码吗?@LoveAajkal你能分享GridView的代码吗?