我在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'
答案 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)。