【发布时间】:2014-03-21 17:09:39
【问题描述】:
我遇到了问题,但没有抛出任何错误。发生的事情是我有一个存储过程正在驱动我的更新,但我无法让 gridview 更新。
我点击了Update 链接按钮,但它实际上并没有更新记录。
这是我的存储过程:
ALTER PROCEDURE [dbo].[CompDev_Update](
@CompID int,
@NewDevCount nchar(10) = null,
@DevelopmentName nvarchar(255) = null,
@City nvarchar(255) = null,
@State nvarchar(255) = null,
@ZipCodeofNewDev nchar(10) = null,
@ProjectStatus nvarchar(255) = null,
@ShoppingCenter nvarchar(255) = null,
@ProjectStartDate float = null,
@ProjectDescription nvarchar(255) = null,
@ProposedAnchorTenants nvarchar(255) = null,
@GLA nchar(10) = null,
@EstCompDate float = null,
@Developer nvarchar(255) = null,
@BusinessUnit nchar(10) = null,
@BU nchar(10) = null,
@CenterName nvarchar(255) = null,
@MSA nvarchar(255) = null,
@BrixmorMSARank nchar(10) = null,
@Count nchar(10) = null,
@Region nvarchar(255) = null,
@DistancefromNewDev nchar(10) = null
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
UPDATE WestCompetition Set NewDevCount=@NewDevCount, DevelopmentName=@DevelopmentName,
City=@City, [State]=@State, ZipCodeofNewDev=@ZipCodeofNewDev, ProjectStatus=@ProjectStatus,
ShoppingCenter=@ShoppingCenter, ProjectStartDate=@ProjectStartDate, ProjectDescription=@ProjectDescription,
ProposedAnchorTenants=@ProposedAnchorTenants, GLA=@GLA, EstCompDate=@EstCompDate,
Developer=@Developer, BusinessUnit=@BusinessUnit, BU=@BU, CenterName=@CenterName,
MSA=@MSA, BrixmorMSARank=@BrixmorMSARank, [Count]=@Count, Region=@Region,
DistancefromNewDev=@DistancefromNewDev
WHERE CompID = @CompID
结束
这是我的asp.net c#背后的代码:
protected void gvCompetition_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
Label CompID = (Label)gvCompetition.Rows[e.RowIndex].FindControl("lblCompID");
TextBox NewDevCount = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtNewDevCount");
TextBox DevelopmentName = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtDevelopmentName");
TextBox City = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtCity");
TextBox State = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtState");
TextBox ZipCodeofNewDev = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtZipCode");
TextBox ProjectStatus = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtProjectStatus");
TextBox ShoppingCenter = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtShoppingCenter");
TextBox ProjectStartDate = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtProjectStartDate");
TextBox ProjectDescription = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtProjectDescription");
TextBox ProposedAnchorTenants = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtProposedAnchorTenants");
TextBox GLA = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtGLA");
TextBox EstCompDate = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtEstCompDate");
TextBox Developer = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtDeveloper");
TextBox BusinessUnit = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtBusinessUnit");
TextBox BU = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtBU");
TextBox CenterName = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtCenterName");
TextBox MSA = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtMSA");
TextBox BrixmorMSARank = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtBrixmorMSARank");
TextBox Count = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtCount");
TextBox Region = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtRegion");
TextBox DistancefromNewDev = (TextBox)gvCompetition.Rows[e.RowIndex].FindControl("txtDistancefromNewDev");
string ecompid = CompID.Text;
string enewdevcount = NewDevCount.Text;
string edevelopmentname = DevelopmentName.Text;
string ecity = City.Text;
string estate = State.Text;
string ezipcode = ZipCodeofNewDev.Text;
string eprojectstatus = ProjectStatus.Text;
string eshoppingcenter = ShoppingCenter.Text;
string eprojectstartdate = ProjectStartDate.Text;
string eprojectdescription = ProjectDescription.Text;
string eproposedanchor = ProposedAnchorTenants.Text;
string egla = GLA.Text;
string eestcompdate = EstCompDate.Text;
string edeveloper = Developer.Text;
string ebusinessunit = BusinessUnit.Text;
string ebu = BU.Text;
string ecentername = CenterName.Text;
string emsa = MSA.Text;
string ebrixmormsarank = BrixmorMSARank.Text;
string ecount = Count.Text;
string eregion = Region.Text;
string edistancefromnewdev = DistancefromNewDev.Text;
UpdateCompetition(ecompid, enewdevcount, edevelopmentname, ecity, estate, ezipcode, eprojectstatus, eshoppingcenter, eprojectstartdate, eprojectdescription, eproposedanchor,
egla, eestcompdate, edeveloper, ebusinessunit, ebu, ecentername, emsa, ebrixmormsarank, ecount, eregion, edistancefromnewdev);
gvCompetition.EditIndex = -1;
BindCompetition();
}
protected void UpdateCompetition(string compid, string newdevcount, string developmentname, string city, string state, string zipcode,
string projectstatus, string shoppingcenter, string projectstartdate, string projectdescription, string proposedanchor, string gla,
string estcompdate, string developer, string businessunit, string bu, string centername, string msa, string brixmormsarank,
string count, string region, string distancefromnewdev)
{
SqlConnection conn = new SqlConnection(cnnString);
conn.Open();
command = new SqlCommand();
command.Connection = conn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "CompDev_Update";
command.Parameters.Add(new SqlParameter("@CompID", SqlDbType.Int));
command.Parameters.Add(new SqlParameter("@NewDevCount", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@DevelopmentName", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@State", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@ZipCodeofNewDev", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@ProjectStatus", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@ShoppingCenter", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@ProjectStartDate", SqlDbType.Float));
command.Parameters.Add(new SqlParameter("@ProjectDescription", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@ProposedAnchorTenants", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@GLA", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@EstCompDate", SqlDbType.Float));
command.Parameters.Add(new SqlParameter("@Developer", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@BusinessUnit", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@BU", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@CenterName", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@MSA", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@BrixmorMSARank", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@Count", SqlDbType.NChar, 10));
command.Parameters.Add(new SqlParameter("@Region", SqlDbType.NVarChar, 255));
command.Parameters.Add(new SqlParameter("@DistancefromNewDev", SqlDbType.NChar, 10));
command.Parameters["@CompID"].Value = Convert.ToInt32(compid.ToString());
command.Parameters["@NewDevCount"].Value = newdevcount;
command.Parameters["@DevelopmentName"].Value = developmentname;
command.Parameters["@City"].Value = city;
command.Parameters["@State"].Value = state;
command.Parameters["@ZipCodeofNewDev"].Value = zipcode;
command.Parameters["@ProjectStatus"].Value = projectstatus;
command.Parameters["@ShoppingCenter"].Value = shoppingcenter;
command.Parameters["@ProjectStartDate"].Value = projectstartdate;
command.Parameters["@ProjectDescription"].Value = projectdescription;
command.Parameters["@ProposedAnchorTenants"].Value = proposedanchor;
command.Parameters["@GLA"].Value = gla;
command.Parameters["@EstCompDate"].Value = estcompdate;
command.Parameters["@Developer"].Value = developer;
command.Parameters["@BusinessUnit"].Value = businessunit;
command.Parameters["@BU"].Value = bu;
command.Parameters["@CenterName"].Value = centername;
command.Parameters["@MSA"].Value = msa;
command.Parameters["@BrixmorMSARank"].Value = brixmormsarank;
command.Parameters["@Count"].Value = count;
command.Parameters["@Region"].Value = region;
command.Parameters["@DistancefromNewDev"].Value = distancefromnewdev;
da = new SqlDataAdapter(command);
ds = new DataSet();
da.Fill(ds);
conn.Close();
}
这是我的 asp.net 代码:
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="gvCompetition" OnPageIndexChanging="gvCompetition_PageIndexChanging"
OnRowEditing="gvCompetition_RowEditing" OnRowCancelingEdit="gvCompetition_RowCancelingEdit"
OnRowUpdating="gvCompetition_RowUpdating"
runat="server" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None"
BorderWidth="1px" CellPadding="1" ForeColor="Black" GridLines="Vertical"
AllowPaging="True" AutoGenerateColumns="False" Font-Size="10px">
<AlternatingRowStyle BackColor="White" />
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#7a1501" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#ed2d22" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#f68121" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
<Columns>
<asp:templatefield Headertext="ID">
<itemtemplate>
<asp:label ID="lblCompID" runat="server" text='<%#Eval("CompID") %>'></asp:label>
</itemtemplate>
</asp:templatefield>
<asp:TemplateField HeaderText="New Dev Count">
<ItemTemplate>
<asp:Label ID="lblNewDevCount" runat="server" Text='<%#Eval("NewDevCount") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtNewDevCount" Width="100%" runat="server" Text='<%#Eval("NewDevCount") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Development Name">
<ItemTemplate>
<asp:Label ID="lblDevelopmentName" runat="server" Text='<%#Eval("DevelopmentName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtDevelopmentName" Width="100%" runat="server" Text='<%#Eval("DevelopmentName") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="City">
<ItemTemplate>
<asp:Label ID="lblCity" runat="server" Text='<%#Eval("City") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCity" Width="100%" runat="server" Text='<%#Eval("City") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="State">
<ItemTemplate>
<asp:Label ID="lblState" runat="server" Text='<%#Eval("State") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtState" Width="100%" runat="server" Text='<%#Eval("State") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Zip Code">
<ItemTemplate>
<asp:Label ID="lblZipCode" runat="server" Text='<%#Eval("ZipCodeofNewDev") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtZipCode" Width="100%" runat="server" Text='<%#Eval("ZipCodeofNewDev") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Project Status">
<ItemTemplate>
<asp:Label ID="lblProjectStatus" runat="server" Text='<%#Eval("ProjectStatus") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtProjectStatus" Width="100%" runat="server" Text='<%#Eval("ProjectStatus") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Shopping Center">
<ItemTemplate>
<asp:Label ID="lblShoppingCenter" runat="server" Text='<%#Eval("ShoppingCenter") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtShoppingCenter" Width="100%" runat="server" Text='<%#Eval("ShoppingCenter") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Project Start Date">
<ItemTemplate>
<asp:Label ID="lblProjectStartDate" runat="server" Text='<%#Eval("ProjectStartDate") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtProjectStartDate" Width="100%" runat="server" Text='<%#Eval("ProjectStartDate") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Project Description">
<ItemTemplate>
<asp:Label ID="lblProjectDescription" runat="server" Text='<%#Eval("ProjectDescription") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtProjectDescription" Width="100%" runat="server" Text='<%#Eval("ProjectDescription") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Proposed Anchor Tenants">
<ItemTemplate>
<asp:Label ID="lblProposedAnchorTenants" runat="server" Text='<%#Eval("ProposedAnchorTenants") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtProposedAnchorTenants" Width="100%" runat="server" Text='<%#Eval("ProposedAnchorTenants") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="GLA">
<ItemTemplate>
<asp:Label ID="lblGLA" runat="server" Text='<%#Eval("GLA") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtGLA" Width="100%" runat="server" Text='<%#Eval("GLA") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Est. Completion Date">
<ItemTemplate>
<asp:Label ID="lblEstCompDate" runat="server" Text='<%#Eval("EstCompDate") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEstCompDate" Width="100%" runat="server" Text='<%#Eval("EstCompDate") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Developer">
<ItemTemplate>
<asp:Label ID="lblDeveloper" runat="server" Text='<%#Eval("Developer") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtDeveloper" Width="100%" runat="server" Text='<%#Eval("Developer") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Business Unit">
<ItemTemplate>
<asp:Label ID="lblBusinessUnit" runat="server" Text='<%#Eval("BusinessUnit") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBusinessUnit" Width="100%" runat="server" Text='<%#Eval("BusinessUnit") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="BU">
<ItemTemplate>
<asp:Label ID="lblBU" runat="server" Text='<%#Eval("BU") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBU" Width="100%" runat="server" Text='<%#Eval("BU") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="CenterName">
<ItemTemplate>
<asp:Label ID="lblCenterName" runat="server" Text='<%#Eval("CenterName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCenterName" Width="100%" runat="server" Text='<%#Eval("CenterName") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="MSA">
<ItemTemplate>
<asp:Label ID="lblMSA" runat="server" Text='<%#Eval("MSA") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtMSA" Width="100%" runat="server" Text='<%#Eval("MSA") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Brixmor MSA Rank">
<ItemTemplate>
<asp:Label ID="lblBrixmorMSARank" runat="server" Text='<%#Eval("BrixmorMSARank") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBrixmorMSARank" Width="100%" runat="server" Text='<%#Eval("BrixmorMSARank") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Count">
<ItemTemplate>
<asp:Label ID="lblCount" runat="server" Text='<%#Eval("Count") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtCount" Width="100%" runat="server" Text='<%#Eval("Count") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Region">
<ItemTemplate>
<asp:Label ID="lblRegion" runat="server" Text='<%#Eval("Region") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtRegion" Width="100%" runat="server" Text='<%#Eval("Region") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Distance from New Dev">
<ItemTemplate>
<asp:Label ID="lblDistancefromNewDev" runat="server" Text='<%#Eval("DistancefromNewDev") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtDistancefromNewDev" Width="100%" runat="server" Text='<%#Eval("DistancefromNewDev") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:LinkButton ID="btnEdit" Text="EDIT" runat="server" CommandName="Edit" />
<span onclick="return confirm('Are you sure you want to delete this record')">
<asp:LinkButton ID="btnDelete" Text="DELETE" runat="server" CommandName="Delete" />
</span>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="btnUpdate" Text="UPDATE" runat="server" CommandName="Update" />
<br />
<asp:LinkButton ID="btnCancel" Text="CANCEL" runat="server" CommandName="Cancel" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="gvCompetition" EventName="PageIndexChanging" />
<asp:AsyncPostBackTrigger ControlID="gvCompetition" EventName="RowEditing" />
<asp:AsyncPostBackTrigger ControlID="gvCompetition" EventName="RowUpdating" />
<asp:AsyncPostBackTrigger ControlID="gvCompetition" EventName="RowCancelingEdit" />
</Triggers>
</asp:UpdatePanel>
我做错了什么导致更新不会发生?为什么当它不更新时我没有收到任何错误?
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本没有前缀! -
另外,我发现那些“全能”存储过程——虽然很诱人——到头来却非常危险。您只有一个凌乱的程序,每次发生任何变化时都需要对其进行更改....为什么不只使用 四个 单独的集中程序 - 一个到
SELECT,一个到INSERT,一个到UPDATE,最后一个到DELETE(如果需要的话)。想想单一职责原则 - 每段代码都应该做好一件事,并且只做一件事。现在,您传入太多参数只是为了删除一些东西...... -
好的,我分离了我的存储过程,但更新仍然无法在 Gridview 上运行。我的存储过程现在称为 CompDev_Update,我所做的只是改变了这个 ALTER PROCEDURE [dbo].[CompDev_Update](@CompID int,我的更新查询仍然是一样的。我在这里做错了什么?
标签: c# asp.net sql-server gridview stored-procedures