簡體   English   中英

操作數類型沖突:int 與 DaysAndHours 不兼容

[英]Operand type clash: int is incompatible with DaysAndHours

異常: Operand type clash: int is incompatible with DaysAndHours at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action

當我向 SQL 參數添加 int 類型值時出現上述異常。如何將 int 值傳遞給 sql 參數。

C#代碼:

 public bool VendorDaysAndHoursInfoByMemberID(UpdateVendaorDaysAndHoursDM updateVendaorDaysAndHoursDM)
        {
            _logger.LogInformation("VendorRepository.vendorDaysAndHoursInfoByMemberID method called!!!");
            var memberId = updateVendaorDaysAndHoursDM.MemberID;

            var vendorDaysAndHoursDMsList = updateVendaorDaysAndHoursDM.DaysAndHours.Select(c => c).Select(c => c).ToList();
            DataTable dtVendorDaysAndHoursDMsList = DataReaderToList.ToDataTable<DaysAndHoursDM>(vendorDaysAndHoursDMsList);

            using (SqlConnection conn = new SqlConnection(GetComapnyConnection.ConnectionString))
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    try
                    {
                        SqlCommand cmd = new SqlCommand("exec VendorDaysAndHoursInfoByMemberID @MemberID, @DaysAndHours", conn, transaction);

                        cmd.CommandTimeout = 0;
                        cmd.Transaction = transaction;

                       cmd.Parameters.AddWithValue("@MemberID", SqlDbType.Int).Value = memberId;

                        //cmd.Parameters.Add(new SqlParameter()
                        //{
                        //    ParameterName = "@MemberID",
                        //    SqlDbType = SqlDbType.Structured,
                        //    Value = memberId,
                        //    TypeName = "MemberID"
                        //});

                        var pDaysAndHoursDMsList = new SqlParameter("@DaysAndHours", SqlDbType.Structured);
                        pDaysAndHoursDMsList.TypeName = "DaysAndHours";
                        if (dtVendorDaysAndHoursDMsList.Rows.Count == 0)
                            pDaysAndHoursDMsList.Value = null;
                        else
                            pDaysAndHoursDMsList.Value = dtVendorDaysAndHoursDMsList;
                        cmd.Parameters.Add(pDaysAndHoursDMsList);
                        var dataReader = cmd.ExecuteReader();
                        var isResult = DataReaderToList.DataReaderMapToList<bool>(dataReader);

                        dataReader.Dispose();

                        transaction.Commit();

                        conn.Close();

                        return true;
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        conn.Close();
                        _logger.LogError(e.Message);
                        return false;
                    }
                }
            }

        }

我需要以以下格式發布數據。

{ 
"MemberID":"a7f1819db38ccb5e03ad52396eafa5ac"                    ,
"DaysAndHours":[
                    {"DayName":"Sunday","StartTime":"08:00:00","EndTime":"17:00:00","Available":false},
                    {"DayName":"Monday","StartTime":"08:00:00","EndTime":"17:00:00","Available":true},
                    {"DayName":"Tuesday","StartTime":"08:00:00","EndTime":"17:00:00","Available":true},
                    {"DayName":"Wednesday","StartTime":"08:00:00","EndTime":"17:00:00","Available":true},
                    {"DayName":"Thursday","StartTime":"08:00:00","EndTime":"17:00:00","Available":true},
                    {"DayName":"Friday","StartTime":"08:00:00","EndTime":"17:00:00","Available":true},
                    {"DayName":"Saturday","StartTime":"08:00:00","EndTime":"19:00:00","Available":true}
                   ]
    }

如何以上述格式將 int 值傳遞給 SQL 參數。

存儲過程:

Create proc [dbo].[VendorDaysAndHoursInfoByMemberID]
(
@DaysAndHours as [dbo].DaysAndHours readonly,
@MemberID int,
@IsSuccess bit= 'false' output
)
as begin
SET NOCOUNT ON;

    update DaysAndHours  set
    DaysAndHours.DayName=DaysAndHoursData.DayName,
    DaysAndHours.StartTime=DaysAndHoursData.StartTime,
    DaysAndHours.EndTime=DaysAndHoursData.EndTime,
    DaysAndHours.Available=DaysAndHoursData.Available

    from  @DaysAndHours DaysAndHoursData
 where MemberID = @MemberID;

 set @IsSuccess = 'true' 

End    
return @IsSuccess 

代碼未顯示錯誤。但isResult計數為零,低於 DataReader。

在此處輸入圖片說明

Sql 命令配置不正確。 嘗試這個


SqlCommand cmd = new SqlCommand("VendorDaysAndHoursInfoByMemberID", conn, transaction);

存儲過程代碼

Create proc [dbo].[VendorDaysAndHoursInfoByMemberID]
(
@DaysAndHours as [dbo].DaysAndHours readonly,
@MemberID int,
@IsSuccess bit= 0 output
)
as begin
SET NOCOUNT ON;

    update DaysAndHours  set
        DayName=@DaysAndHours.DayName,
        StartTime=@DaysAndHours.StartTime,
        EndTime=@DaysAndHours.EndTime,
        Available=@DaysAndHours.Available
from DaysAndHours join @DaysAndHours
ON DaysAndHours.MemberID =@DaysAndHours.MemberID 
 where MemberID = @MemberID;

 set @IsSuccess = 1 

End    
return @IsSuccess 

暫無
暫無

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

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