C# SQL Server:存储过程和ASP.NET
我这里有这个代码:C# SQL Server:存储过程和ASP.NET,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我这里有这个代码: public List<CellModel> PostScheduledTasks(List<CellModel> cells) { var sortedCells = cells.OrderBy(c => c.sortOrder).ToList(); try { using (connection = new SqlConnection(connectionString)) {
public List<CellModel> PostScheduledTasks(List<CellModel> cells)
{
var sortedCells = cells.OrderBy(c => c.sortOrder).ToList();
try
{
using (connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("PostScheduledTasks", connection))
{
command.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < sortedCells.Count; i++)
{
SqlParameter parameter1 = new SqlParameter("@actualStart", SqlDbType.DateTime);
parameter1.Value = sortedCells[i].actualDate;
parameter1.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter1);
SqlParameter parameter2 = new SqlParameter("@actualFinish", SqlDbType.DateTime);
parameter2.Value = sortedCells[i].finishedDate;
parameter2.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter2);
SqlParameter parameter3 = new SqlParameter("@actualEndDate", SqlDbType.DateTime);
parameter3.Value = sortedCells[i].finishedDate;
parameter3.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter3);
SqlParameter parameter4 = new SqlParameter("@UserDate1", SqlDbType.DateTime);
parameter4.Value = sortedCells[i].scheduledDate;
parameter4.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter4);
SqlParameter parameter5 = new SqlParameter("@IsCompleted", SqlDbType.Bit);
parameter5.Value = (sortedCells[i].selected == true) ? 1 : 0;
parameter5.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter5);
SqlParameter parameter6 = new SqlParameter("@PercentComplete", SqlDbType.Float);
parameter6.Value = (sortedCells[i].selected == true) ? 1 : 0;
parameter6.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter6);
SqlParameter parameter7 = new SqlParameter("@UStmp", SqlDbType.VarChar);
parameter7.Value = sortedCells[i].completedBy;
parameter7.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter7);
SqlParameter parameter8 = new SqlParameter("@ScheduleTaskID", SqlDbType.Int);
parameter8.Value = sortedCells[i].scheduleTaskID;
parameter8.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter8);
SqlParameter parameter9 = new SqlParameter("@SortOrder", SqlDbType.Int);
parameter9.Value = sortedCells[i].sortOrder;
parameter9.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter9);
command.ExecuteNonQuery();
}
UserModel userModel = new UserModel();
userModel.name = "true";
userModel.userName = "true";
return cells;
}
}
}
catch(Exception e)
{
var error = e.Message.ToString();
UserModel nullModel = new UserModel();
nullModel.name = "true";
nullModel.userName = "true";
return cells;
}
finally
{
connection.Close();
}
}
公共列表PostScheduledTasks(列表单元格)
{
var sortedCells=cells.OrderBy(c=>c.sortOrder.ToList();
尝试
{
使用(connection=newsqlconnection(connectionString))
{
connection.Open();
使用(SqlCommand=newsqlcommand(“PostScheduledTasks”,连接))
{
command.CommandType=CommandType.storedProcess;
对于(int i=0;i
我有三个班级项目。当它第一次执行循环时,一切都按预期进行,但在第二次循环后,我得到以下错误:
过程或函数PostScheduledTasks指定的参数太多
是否必须在每个项目之后的循环结束时清除某些内容?您应该在每次迭代之前通过调用
clear()
方法清除command.parameters
属性中保存的参数
例如
for(int i=0;i
每次通过循环时,都会添加更多参数,并且当前没有清除这些参数。因此,错误是不言自明的:指定的参数太多。您应该在每次迭代之前通过调用
clear()
方法清除命令中保存的参数。parameters
属性
例如
for(int i=0;i
每次通过循环时,都会添加更多参数,并且当前没有清除这些参数。因此,错误是不言自明的:指定的参数太多。首先定义参数,然后将for循环放在后面,并直接设置值;目前,如果通读代码,该命令在第一次迭代中有9个参数,但在第二次迭代中有18个参数,在第三次迭代中有27个参数,依此类推 将其更改为(粗略伪代码):
这样做的好处是,您不会每次都构建参数对象,在重用对象时会频繁创建和销毁对象…首先定义参数,然后放入for循环,然后直接设置值;目前,如果通读代码,该命令在第一次迭代中有9个参数,但在第二次迭代中有18个参数,在第三次迭代中有27个参数,依此类推 将其更改为(粗略伪代码):
这样做的好处是,您不会每次都构建参数对象,在重用对象时会频繁创建和销毁对象…是的,您应该清除
命令。参数是的,您应该清除命令。参数
for (int i = 0; i < sortedCells.Count; i++)
{
command.Parameters.Clear();
//your code to add parameters
}
//Define parameters here
for (..)
{
cmd.Parameters[0].Value = "X";
.
.
}