【发布时间】:2015-12-27 01:42:28
【问题描述】:
所以目前我的代码动态地将来自 Visual Studio 中继器的数据添加到数据库中。我下面的代码运行良好,除了一个主要问题。在我的 foreach 循环中,它为每个 Repeater 文本框创建一个新行。相反,我希望它总共创建 1 行。
例如,我的中继器可以将 FirstName 和 LastName 作为列。在我的中继器中,它可以收集这些数据,例如 John 用于 FirstName,Smith 用于 LastName。它应该在表格的一行中输入 John Smith,但实际上将 John 添加为第 1 行,将 Smith 添加为第 2 行。
我该如何解决这个问题?
这是我将数据动态添加到数据库的代码:
protected void BtnSubmit_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Events2"].ConnectionString))
{
sqlConn.Open();
using (SqlCommand sqlCmd = new SqlCommand())
{
foreach (RepeaterItem rpItem in RepeaterForm.Items)
{
Label lblDisplayName = rpItem.FindControl("lblDisplayName") as Label;
Label lblColumnName = rpItem.FindControl("lblColumnName") as Label;
TextBox txtColumnValue = rpItem.FindControl("txtColumnValue") as TextBox;
if (txtColumnValue != null)
{
sqlCmd.Connection = sqlConn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "spInsFormRegistrant";
sqlCmd.Parameters.Clear();
sqlCmd.Parameters.Add("@EventId", SqlDbType.Int).Value = eventId;
sqlCmd.Parameters.Add("@FormId", SqlDbType.Int).Value = formId;
sqlCmd.Parameters.Add("@ColumnName", SqlDbType.NVarChar).Value = lblColumnName.Text;
sqlCmd.Parameters.Add("@ColumnValue", SqlDbType.NVarChar).Value = txtColumnValue.Text;
sqlCmd.ExecuteNonQuery();
}
}
}
}
PnlNone.Visible = false;
PnlExist.Visible = false;
PnlSuccess.Visible = true;
PnlFail.Visible = false;
}
存储过程代码:
ALTER PROCEDURE [dbo].[spInsFormRegistrant]
-- Add the parameters for the stored procedure here
@EventId int,
@FormId int,
@ColumnName varchar(100),
@ColumnValue varchar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @Query nvarchar(4000)
declare @ParmDefinition nvarchar(500);
set @Query = 'INSERT into Registrant(DateCreated,EventId,FormId,'+
(@ColumnName) +') values (CURRENT_TIMESTAMP, @EventId, @FormId, @ColumnValue)'
set @ParmDefinition = N'@ColumnValue varchar(100), @EventID int, @FormID int'
exec sp_executesql @Query, @ParmDefinition,
@ColumnValue = @ColumnValue,
@EventID = @EventID,
@FormID = @FormID
END
编辑
ALTER PROCEDURE [dbo].[spInsFormRegistrant]
-- Add the parameters for the stored procedure here
@EventId int,
@FormId int,
@ColumnName varchar(100),
@ColumnValue varchar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @searchID int
-- Insert statements for procedure here
IF @searchID IS null
BEGIN
declare @Query nvarchar(4000)
declare @ParmDefinition nvarchar(500)
set @Query = 'INSERT into Registrant(DateCreated,EventId,FormId,'+
(@ColumnName) +') values (CURRENT_TIMESTAMP, @EventId, @FormId, @ColumnValue)
set @searchID = SCOPE_IDENTITY()'
set @ParmDefinition = N'@ColumnValue varchar(100), @EventID int, @FormID int, @searchID INT OUTPUT'
exec sp_executesql @Query, @ParmDefinition,
@ColumnValue = @ColumnValue,
@EventID = @EventID,
@FormID = @FormID,
@searchID = @searchID OUTPUT;
END
IF @searchID IS NOT null
BEGIN
declare @Query2 nvarchar(4000)
declare @ParmDefinition2 nvarchar(500)
set @Query2 = 'UPDATE Registrant SET DateCreated = CURRENT_TIMESTAMP, EventId = @EventId, FormId = @FormId, ' +quotename(@ColumnName)+ ' = @ColumnValue WHERE RegistrantId = @searchID'
set @ParmDefinition2 = N'@ColumnValue varchar(100), @EventID int, @FormID int, @searchID int'
exec sp_executesql @Query2, @ParmDefinition2,
@ColumnValue = @ColumnValue,
@EventID = @EventID,
@FormID = @FormID,
@searchID = @searchID
END
END
【问题讨论】:
标签: c# asp.net sql-server stored-procedures repeater