我的代码中的问题在哪里?
我使用存储过程和事务。
要使一个参数正常工作,但当参数数量多于一个时,会发生错误。
我的问题在哪里?
这是我在C#中的代码
internal static bool ExecuteNonQueryTransaction(string CommandName, CommandType cmdType, SqlParameter[][] pars)
{
int result = 0;
SqlTransaction tr = null;
int h = pars.GetLength(0);
using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
{
if (con.State != ConnectionState.Open)
{
con.Open();
}
try
{
tr = con.BeginTransaction();
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandType = cmdType;
cmd.Transaction = tr;
cmd.CommandText = CommandName;
// cmd.Parameters.AddRange(pars);
for (int i = 0; i < pars.GetLength(0); i++)
{
cmd.Parameters.AddRange(pars[i]);
cmd.ExecuteNonQuery();
}
tr.Commit();
}
}
catch
{
if (tr != null)
{
tr.Rollback();
}
//return false;
}
}
return (result > 0);
}
这是我的存储过程
ALTER PROCEDURE dbo.AddNewUserTypePageAccess
(@id_user_type int,
@id_page_access int)
as
insert into user_type_page_access(id_user_type, id_page_access)
values(@id_user_type, @id_page_access)
return
感谢您的帮助.....
答案 0 :(得分:0)
你不应该在添加参数的循环内调用ExecuteNonQuery();
!添加所有参数,然后调用ExecuteNonQuery();
一次,并填入所有参数。
使用此代码:
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandType = cmdType;
cmd.Transaction = tr;
cmd.CommandText = CommandName;
// cmd.Parameters.AddRange(pars);
for (int i = 0; i < pars.GetLength(0); i++)
{
cmd.Parameters.AddRange(pars[i]);
}
// call ExecuteNonQuery only AFTER you've added all the parameters!
cmd.ExecuteNonQuery();
tr.Commit();
}