C# 执行存储过程时,无法将参数值从字符串转换为Int32

C# 执行存储过程时,无法将参数值从字符串转换为Int32,c#,.net,sql-server,C#,.net,Sql Server,我有一个带有这些参数的SQL过程 @WorkflowApprovalHistoryId int OUTPUT, @ProjectUid uniqueidentifier, @ProjectId nvarchar(50), @StageUid uniqueidentifier, @Username

我有一个带有这些参数的SQL过程

@WorkflowApprovalHistoryId      int                 OUTPUT,
    @ProjectUid                     uniqueidentifier,
    @ProjectId                      nvarchar(50),
    @StageUid                       uniqueidentifier,
    @Username                       nvarchar(50),
    @WasRejected                    bit,
    @Cost                           money,
    @Work                           money,
    @StartDate                      datetime,
    @FinishDate                     datetime,
    @InsertDate                     datetime            OUTPUT
我已经检查了这个,但它对我没有帮助,因为我没有任何输入参数int

我正在这里粘贴代码

private void LogApproval(Guid prjUId, bool wasRejected) {
            string projectId = string.Empty;
            Nullable<Guid> stageUid = null;
            Nullable<decimal> cost = null;
            Nullable<decimal> work = null;
            Nullable<DateTime> startDate = null;
            Nullable<DateTime> finishDate = null;
            string stageGuid = string.Empty;
            //Processing here
            SqlConnection conn = null;
            conn = new SqlConnection(getConnectionString());
            conn.Open();
            SqlCommand cmnd=new SqlCommand();
            cmnd.CommandText="ProcedureName";
            cmnd.CommandType=CommandType.StoredProcedure;
            cmnd.Connection=conn;
            SqlParameter param1=new SqlParameter();
            param1=cmnd.Parameters.Add("@WorkflowApprovalHistoryId",SqlDbType.Int);
            param1.Direction=ParameterDirection.ReturnValue;

            SqlParameter param2=new SqlParameter();
            param2=cmnd.Parameters.Add("@ProjectUid",SqlDbType.UniqueIdentifier);//sharepoint
            param2.Direction=ParameterDirection.Input;
            param2.Value = System.Data.SqlTypes.SqlGuid.Parse(prjUId.ToString());
            //param2.Value=prjUId;
            SqlParameter param3=new SqlParameter();
            param3=cmnd.Parameters.Add("@ProjectId",SqlDbType.NVarChar);
            param3.Direction=ParameterDirection.Input;
            param3.Value=projectId;
            SqlParameter param4=new SqlParameter();
            param4=cmnd.Parameters.Add("@StageUid",SqlDbType.UniqueIdentifier);// PSI
            param4.Direction=ParameterDirection.Input;
            param4.Value = System.Data.SqlTypes.SqlGuid.Parse(stageUid.ToString());
            //param4.Value=stageUid;
            SqlParameter param5=new SqlParameter();
            param5=cmnd.Parameters.Add("@Username",SqlDbType.NVarChar); //unidentified
            param5.Direction=ParameterDirection.Input;
            param1.Value="userName";
            SqlParameter param6=new SqlParameter();
            param6=cmnd.Parameters.Add("@WasRejected",SqlDbType.Bit);//form status provide as input
            param6.Direction=ParameterDirection.Input;
            if (wasRejected == true)
                param6.Value = 1;
            else
                param6.Value = 0;
            SqlParameter param7=new SqlParameter();
            param7=cmnd.Parameters.Add("@Cost",SqlDbType.Money); //PSI
            param7.Direction=ParameterDirection.Input;
            param7.Value=cost;
            SqlParameter param8=new SqlParameter();
            param8=cmnd.Parameters.Add("@Work",SqlDbType.Money);//PSI
            param8.Direction=ParameterDirection.Input;
            param8.Value=work;
            SqlParameter param9=new SqlParameter();
            param9=cmnd.Parameters.Add("@StartDate",SqlDbType.DateTime);// PSI
            param9.Direction=ParameterDirection.Input;
            param9.Value=startDate;
            SqlParameter param10=new SqlParameter();
            param10=cmnd.Parameters.Add("@FinishDate",SqlDbType.DateTime);// PSI
            param10.Direction=ParameterDirection.Input;
            param10.Value=finishDate;


            SqlParameter param11=new SqlParameter();
            param11=cmnd.Parameters.Add("@InsertDate",SqlDbType.DateTime);
            param11.Direction = ParameterDirection.ReturnValue;

            cmnd.ExecuteNonQuery();
            var HistoryID = param1.Value;
            var InsertDate = param11.Value;
}
private void LogApproval(Guid prjUId,bool被拒绝){
string projectId=string.Empty;
可空stageUid=null;
可空成本=空;
可空功=空;
可为null的startDate=null;
可为null的finishDate=null;
string stageGuid=string.Empty;
//在这里处理
SqlConnection-conn=null;
conn=新的SqlConnection(getConnectionString());
conn.Open();
SqlCommand cmnd=新的SqlCommand();
cmnd.CommandText=“ProcedureName”;
cmnd.CommandType=CommandType.StoredProcess;
cmnd.连接=连接;
SqlParameter param1=新的SqlParameter();
param1=cmnd.Parameters.Add(“@WorkflowApprovalHistoryId”,SqlDbType.Int);
param1.Direction=ParameterDirection.ReturnValue;
SqlParameter param2=新的SqlParameter();
param2=cmnd.Parameters.Add(“@ProjectUid”,SqlDbType.UniqueIdentifier);//sharepoint
param2.Direction=ParameterDirection.Input;
param2.Value=System.Data.SqlTypes.SqlGuid.Parse(prjUId.ToString());
//param2.Value=prjUId;
SqlParameter param3=新的SqlParameter();
param3=cmnd.Parameters.Add(“@ProjectId”,SqlDbType.NVarChar);
param3.Direction=ParameterDirection.Input;
param3.Value=projectd;
SqlParameter param4=新的SqlParameter();
param4=cmnd.Parameters.Add(“@StageUid”,SqlDbType.UniqueIdentifier);//PSI
param4.Direction=ParameterDirection.Input;
param4.Value=System.Data.SqlTypes.SqlGuid.Parse(stageUid.ToString());
//param4.Value=stageUid;
SqlParameter param5=新的SqlParameter();
param5=cmnd.Parameters.Add(“@Username”,SqlDbType.NVarChar);//未识别
param5.Direction=ParameterDirection.Input;
param1.Value=“用户名”;
SqlParameter param6=新的SqlParameter();
param6=cmnd.Parameters.Add(“@WasRejected”,SqlDbType.Bit);//表单状态作为输入提供
param6.Direction=ParameterDirection.Input;
如果(wasRejected==true)
参数6.值=1;
其他的
参数6.值=0;
SqlParameter param7=新的SqlParameter();
param7=cmnd.Parameters.Add(“@Cost”,SqlDbType.Money);//PSI
param7.Direction=ParameterDirection.Input;
7.价值=成本;
SqlParameter param8=新的SqlParameter();
param8=cmnd.Parameters.Add(“@Work”,SqlDbType.Money);//PSI
param8.Direction=ParameterDirection.Input;
8.价值=工作;
SqlParameter param9=新的SqlParameter();
param9=cmnd.Parameters.Add(“@StartDate”,SqlDbType.DateTime);//PSI
param9.Direction=ParameterDirection.Input;
参数9.值=起始日期;
SqlParameter param10=新的SqlParameter();
param10=cmnd.Parameters.Add(“@FinishDate”,SqlDbType.DateTime);//PSI
param10.Direction=ParameterDirection.Input;
参数10.值=完成日期;
SqlParameter param11=新的SqlParameter();
param11=cmnd.Parameters.Add(“@InsertDate”,SqlDbType.DateTime);
param11.Direction=ParameterDirection.ReturnValue;
cmnd.ExecuteNonQuery();
var HistoryID=param1.值;
var InsertDate=param11.Value;
}

在执行Execute NonQuery时,它抛出将参数值从字符串转换为Int32失败。输出参数不应为
ParameterDirection.output
,而不是
ParameterDirection.ReturnValue

ParameterDirection.ReturnValue
用于SQL
return
语句生成的存储过程的整数结果值


顺便说一句,
Parameters.AddWithValue
建议优先于
Parameters.Add
而不是
param1.Direction=ParameterDirection.ReturnValue
尝试使用
param1.Direction=ParameterDirection.Output
并检查是否有效。顺便问一下,add和addWithValues之间的区别是什么,而不是写入param3=cmnd.Parameters.add(“@projectd”,SqlDbType.NVarChar);param3.Direction=ParameterDirection.Input;param3.Value=projectd;您可以写入param3=cmnd.Parameters.AddWithValue(“@ProjectId”,ProjectId);