存储过程不是从C#代码执行的

时间:2014-08-10 04:54:59

标签: asp.net sql-server stored-procedures

我在sql server中创建了一个存储的precedure,代码如下:

CREATE  PROCEDURE [dbo].[sp_insert_to_SCT_AccessPermission] 
(
    @AccessPesrmission_VahedSazmani_ID char(5)=NULL,
    @AccessPesrmission_GorohKarmandi_ID char(10)=NULL,
    @AccessPesrmission_Semat_ID char(13)=NULL,
    @AccessPesrmission_Personel_ID  char(8)=NULL,
    @AccessPermission_Read bit =NULL,
    @AccessPermission_Edit bit=NULL ,
    @AccessPermission_Delete bit=NULL ,
    @AccessPermission_Add bit=NULL ,
    @AccessPesrmission_SatheSazmani_ID char(2)=NULL ,
    @AccessPesrmission_Source_ID int=NULL

)

AS
BEGIN
    INSERT INTO [dbo].[SCT_AccessPermission]
           ([AccessPesrmission_VahedSazmani_ID]
           ,[AccessPesrmission_GorohKarmandi_ID]
           ,[AccessPesrmission_Semat_ID]
           ,[AccessPesrmission_Personel_ID]
           ,[AccessPermission_Read]
           ,[AccessPermission_Edit]
           ,[AccessPermission_Delete]
           ,[AccessPermission_Add]
           ,[AccessPesrmission_SatheSazmani_ID]
           ,[AccessPesrmission_Source_ID])
     VALUES
           (@AccessPesrmission_VahedSazmani_ID
           ,@AccessPesrmission_GorohKarmandi_ID 
           ,@AccessPesrmission_Semat_ID
           ,@AccessPesrmission_Personel_ID
           ,@AccessPermission_Read
           ,@AccessPermission_Edit
           ,@AccessPermission_Delete
           ,@AccessPermission_Add
           ,@AccessPesrmission_SatheSazmani_ID 
           ,@AccessPesrmission_Source_ID)
END

我在我的C#代码中使用以下函数:

 public string Execute_Sp(string spName, SqlParameter[] parameters)
        {
            SqlCommand cmd = connection.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            string cmdtext = "EXEC " + spName + " ";
            for (int i = 0; i < parameters.Length; i++)
            {
                if (parameters[i].Value == DBNull.Value || string.IsNullOrEmpty(parameters[i].Value.ToString())) { }
                else
                {
                    if (i != 0) cmdtext = cmdtext + " , ";
                    cmdtext = cmdtext + "@" + parameters[i].ParameterName + " = ";
                    cmdtext = cmdtext + "\'" + parameters[i].Value + "\'";
                }
            }    
            cmd.CommandText = cmdtext;
            cmd.ExecuteNonQuery();
            return "1";    
        }

但每次我调用它时都会出现此错误:Could not find stored procedure ''. 当它出错时,我从调试模式复制命令文本并将其复制到sql server中,它运行完美!我的意思是我的功能正确的代码!它有什么问题?

其中一个案例中的命令文本是:

EXEC sp_insert_to_SCT_AccessPermission @AccessPesrmission_VahedSazmani_ID = '04011',
@AccessPermission_Read = 'True', 
@AccessPermission_Edit = 'False', 
@AccessPermission_Delete = 'False', 
@AccessPermission_Add = 'False', 
@AccessPesrmission_Source_ID = '13',
@AccessPesrmission_SatheSazmani_ID = '1'

2 个答案:

答案 0 :(得分:3)

命令文本应该只是存储过程名称:

cmd.CommandText = "[dbo].[sp_insert_to_SCT_AccessPermission]";

然后使用以下参数将参数添加到SqlCommand对象的Parameters集合中。

cmd.Parameters.AddWithValue(parameters[i].ParameterName, parameters[i].Value);

答案 1 :(得分:0)

您应该了解在.NET应用程序中执行存储过程的机制。 1.如果您使用的是CommandType .StoredProcedure,则命令文本的值仅为 存储过程的名称,因此请勿放置&#34; exec ...&#34;或者除了存储过程的名称之外的任何其他内容。 2.将sql参数的值放在SQLParameter对象中,并将其添加到sqlCommand对象中,例如:objSqlCommand1.Parameters.Add(objSqlParameter1)。