簡體   English   中英

在執行存儲過程時,無法將參數值從String轉換為Int32

[英]Failed to convert parameter value from a String to a Int32 while executing stored procedure

我有一個帶有這些參數的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

我已檢查此失敗轉換參數值從字符串到Int32 ,但它沒有幫助我,因為我沒有任何輸入參數為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;
}

在執行Execute NonQuery時,它會拋出將參數值從String轉換為Int32失敗

輸出參數不應該是ParameterDirection.Output ,而不是ParameterDirection.ReturnValue

ParameterDirection.ReturnValue用於由SQL return語句生成的存儲過程的整數結果值

順便說一下, Parameters.AddWithValue建議過Parameters.Add對於輸入值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM