[英]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.