使用 asp.net C# 将动态创建的文本字段值插入到同一 ID 的存储过程
Stored Procedure for inserting text field values that is created dynamically to the same id using asp.net C#
我是 ASP.net webforms.Im 的新手,我有一个活动页面,其中我有一个字段可以添加销售渠道负责人邮件 id.when 我点击加号按钮我将能够添加多个销售渠道负责人。
为了使用 Stored procedure.and 将表单值插入到数据库中,它使用一个销售渠道主管电子邮件 ID 插入记录。
我想知道如何编写一个存储过程,用于将动态文本框值插入到 sql 服务器的同一记录(即 ID 和事件名称应该相同)。
这是我的存储过程
CREATE PROCEDURE SPInsertEvent
@eventName varchar(200),
@eventDate date,
@costPerHead varchar(200),
@totalCost varchar(200),
@salesChannelHeads varchar(200),
@salesManagers varchar(200),
@eventCreationTime datetime
AS
BEGIN
SET NOCOUNT ON
-- Insert statements for procedure here
INSERT INTO dbo.hp_event
(event_name, event_date, cost_per_head, total_cost, sales_channel_head, sales_manager, event_creation_time)
VALUES
(@eventName, @eventDate, @costPerHead, @totalCost, @salesChannelHeads, @salesManagers, @eventCreationTime)
END
这是我的 ASP.net 函数
SqlCommand cmd = new SqlCommand("SPInsertEvent", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("EventName", txtEventName.Text);
cmd.Parameters.AddWithValue("EventDate", Convert.ToDateTime(txtEventDate.Text));
cmd.Parameters.AddWithValue("CostPerHead", txtTotCostPerHead.Text);
cmd.Parameters.AddWithValue("TotalCost", txtTotalCostEvent.Text);
cmd.Parameters.AddWithValue("SalesChannelHead", txtSalesChannelHead.Text);
cmd.Parameters.AddWithValue("SalesManager", txtSalesManagers.Text);
cmd.Parameters.AddWithValue("EventCreationTime", DateTime.Now);
conn.Open();
int k = cmd.ExecuteNonQuery();
if (k != 0)
{
string message = "Event added successfully.";
string script = "window.onload = function(){ alert('";
script += message;
script += "')};";
ClientScript.RegisterStartupScript(this.GetType(), "SuccessMessage", script, true);
}
conn.Close();
你在评论里说了"What i need is a stored procedure for inserting saleschannel heads email id(txtSalesChannelHead,txtSalesChannelHead1,txtSalesChannelHead2) into the sql server table with same id,that is there will be duplicate rows in the table"。从我所看到的您的场景来看,处理动态数量的输入最好不是在存储过程中完成的。更简单的方法是 运行 从您的 .NET 代码中为每个文本框插入一次过程。现在我不知道你的文本框是如何被添加的,所以我不能告诉你如何得到文本框值的集合,但是一旦你有了它,一个简单的 foreach 循环就会让你 运行 存储过程每个人一次。
与其将给定事件的所有电子邮件 ID 列表存储在一个 table 中,我建议您将它们存储在 separate
table 中,您可以从hp_event table 随时需要。所以你的数据库设计应该像下面这样 eventid
of hp_eventSalesManagers
references eventId
of hp_event
-
要使此设计有效,您可以使用 ADO.NET 中的 Table Valued Parameters
并按照以下步骤操作:
创建 User Defined Type
-
CREATE TYPE [dbo].[ChannelHeads] As Table
(
EmailIds VARCHAR(50)
)
每当您单击按钮时填充新数据Table(我正在使用会话来跟踪
以前的数据),下面是 sample
代码:
protected void btnAdd_Click(object sender, EventArgs e)
{
if (Session["DataTable"] == null)
{
dataTable = new DataTable();
dataTable.Columns.Add("EmailIds", typeof(string));
Session.Add("DataTable", dataTable);
}
else
{
//If yes then get it from current session
dataTable = (DataTable)Session["DataTable"];
}
DataRow dt_row;
dt_row = dataTable.NewRow();
dt_row["EmailIds"] = name.Text;
dataTable.Rows.Add(dt_row);
}
提交到数据库时添加以下参数(参见我将数据table传递给数据库的方式):
SqlParameter parameterSalesChannelHeads = new SqlParameter();
parameterSalesChannelHeads.ParameterName = "@salesChannelHeads";
parameterSalesChannelHeads.SqlDbType = System.Data.SqlDbType.Structured;
parameterSalesChannelHeads.Value = (DataTable)Session["DataTable"];
parameterSalesChannelHeads.TypeName = "dbo.ChannelHeads";
cmd.Parameters.Add(parameterSalesChannelHeads);
以上述格式更改所有参数只是为了确保您正在使用
Parameters.Add
而不是提到的 Parameters.AddWithValue
here
最后改变程序如下填充tables,below is one of the way
,
您可以启用错误处理并改进代码:
ALTER PROCEDURE SPInsertEvent
@eventName varchar(200),
@eventDate datetime,
@costPerHead varchar(200),
@totalCost varchar(200),
@salesChannelHeads As [dbo].[ChannelHeads] Readonly,
@salesManagers varchar(200),
@eventCreationTime datetime
AS
BEGIN
SET NOCOUNT ON
DECLARE @eventID INT
-- Insert statements for procedure here
INSERT INTO dbo.hp_event
(event_name, eventDate, costPerHead, totalCost, eventCreationTime,
salesManagers)
VALUES
(@eventName, @eventDate, @costPerHead, @totalCost,@eventCreationTime,
@salesManagers)
SET @eventID = SCOPE_IDENTITY()
INSERT INTO dbo.hp_eventSalesManagers
(eventid,event_name,salesChannelHeads)
SELECT @eventID, @eventName, EmailIds
FROM
@salesChannelHeads
END
最后,按照评论部分中的说明相应地更改字段的数据类型,以便更清晰和使用。
我是 ASP.net webforms.Im 的新手,我有一个活动页面,其中我有一个字段可以添加销售渠道负责人邮件 id.when 我点击加号按钮我将能够添加多个销售渠道负责人。
为了使用 Stored procedure.and 将表单值插入到数据库中,它使用一个销售渠道主管电子邮件 ID 插入记录。
我想知道如何编写一个存储过程,用于将动态文本框值插入到 sql 服务器的同一记录(即 ID 和事件名称应该相同)。
这是我的存储过程
CREATE PROCEDURE SPInsertEvent
@eventName varchar(200),
@eventDate date,
@costPerHead varchar(200),
@totalCost varchar(200),
@salesChannelHeads varchar(200),
@salesManagers varchar(200),
@eventCreationTime datetime
AS
BEGIN
SET NOCOUNT ON
-- Insert statements for procedure here
INSERT INTO dbo.hp_event
(event_name, event_date, cost_per_head, total_cost, sales_channel_head, sales_manager, event_creation_time)
VALUES
(@eventName, @eventDate, @costPerHead, @totalCost, @salesChannelHeads, @salesManagers, @eventCreationTime)
END
这是我的 ASP.net 函数
SqlCommand cmd = new SqlCommand("SPInsertEvent", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("EventName", txtEventName.Text);
cmd.Parameters.AddWithValue("EventDate", Convert.ToDateTime(txtEventDate.Text));
cmd.Parameters.AddWithValue("CostPerHead", txtTotCostPerHead.Text);
cmd.Parameters.AddWithValue("TotalCost", txtTotalCostEvent.Text);
cmd.Parameters.AddWithValue("SalesChannelHead", txtSalesChannelHead.Text);
cmd.Parameters.AddWithValue("SalesManager", txtSalesManagers.Text);
cmd.Parameters.AddWithValue("EventCreationTime", DateTime.Now);
conn.Open();
int k = cmd.ExecuteNonQuery();
if (k != 0)
{
string message = "Event added successfully.";
string script = "window.onload = function(){ alert('";
script += message;
script += "')};";
ClientScript.RegisterStartupScript(this.GetType(), "SuccessMessage", script, true);
}
conn.Close();
你在评论里说了"What i need is a stored procedure for inserting saleschannel heads email id(txtSalesChannelHead,txtSalesChannelHead1,txtSalesChannelHead2) into the sql server table with same id,that is there will be duplicate rows in the table"。从我所看到的您的场景来看,处理动态数量的输入最好不是在存储过程中完成的。更简单的方法是 运行 从您的 .NET 代码中为每个文本框插入一次过程。现在我不知道你的文本框是如何被添加的,所以我不能告诉你如何得到文本框值的集合,但是一旦你有了它,一个简单的 foreach 循环就会让你 运行 存储过程每个人一次。
与其将给定事件的所有电子邮件 ID 列表存储在一个 table 中,我建议您将它们存储在 separate
table 中,您可以从hp_event table 随时需要。所以你的数据库设计应该像下面这样 eventid
of hp_eventSalesManagers
references eventId
of hp_event
-
要使此设计有效,您可以使用 ADO.NET 中的 Table Valued Parameters
并按照以下步骤操作:
创建
User Defined Type
-CREATE TYPE [dbo].[ChannelHeads] As Table ( EmailIds VARCHAR(50) )
每当您单击按钮时填充新数据Table(我正在使用会话来跟踪 以前的数据),下面是
sample
代码:protected void btnAdd_Click(object sender, EventArgs e) { if (Session["DataTable"] == null) { dataTable = new DataTable(); dataTable.Columns.Add("EmailIds", typeof(string)); Session.Add("DataTable", dataTable); } else { //If yes then get it from current session dataTable = (DataTable)Session["DataTable"]; } DataRow dt_row; dt_row = dataTable.NewRow(); dt_row["EmailIds"] = name.Text; dataTable.Rows.Add(dt_row); }
提交到数据库时添加以下参数(参见我将数据table传递给数据库的方式):
SqlParameter parameterSalesChannelHeads = new SqlParameter(); parameterSalesChannelHeads.ParameterName = "@salesChannelHeads"; parameterSalesChannelHeads.SqlDbType = System.Data.SqlDbType.Structured; parameterSalesChannelHeads.Value = (DataTable)Session["DataTable"]; parameterSalesChannelHeads.TypeName = "dbo.ChannelHeads"; cmd.Parameters.Add(parameterSalesChannelHeads);
以上述格式更改所有参数只是为了确保您正在使用
Parameters.Add
而不是提到的Parameters.AddWithValue
here
最后改变程序如下填充tables,
below is one of the way
, 您可以启用错误处理并改进代码:ALTER PROCEDURE SPInsertEvent @eventName varchar(200), @eventDate datetime, @costPerHead varchar(200), @totalCost varchar(200), @salesChannelHeads As [dbo].[ChannelHeads] Readonly, @salesManagers varchar(200), @eventCreationTime datetime AS BEGIN SET NOCOUNT ON DECLARE @eventID INT -- Insert statements for procedure here INSERT INTO dbo.hp_event (event_name, eventDate, costPerHead, totalCost, eventCreationTime, salesManagers) VALUES (@eventName, @eventDate, @costPerHead, @totalCost,@eventCreationTime, @salesManagers) SET @eventID = SCOPE_IDENTITY() INSERT INTO dbo.hp_eventSalesManagers (eventid,event_name,salesChannelHeads) SELECT @eventID, @eventName, EmailIds FROM @salesChannelHeads END
最后,按照评论部分中的说明相应地更改字段的数据类型,以便更清晰和使用。