Я использую .NET 4.0 с ASP.NET 4.0 и C# (это будет C# 4.0?).Confused о перегрузке метода
Я хочу, чтобы вставить данные в моей базе данных SQL Server и у меня есть метод, как и справиться с этим:
public int InsertTrade(
string symbol,
string tradeSetupId,
int tradeTypeId,
decimal lotsPerUnit,
string chartTimeFrame,
int tradeGrade,
int executionGrade,
int MFEPips,
int MAEPips,
decimal pctAccountRisked
)
{
SqlCommand cmd = new SqlCommand("usp_InsertTrade");
cmd.Parameters.AddWithValue("@symbol", symbol);
cmd.Parameters.AddWithValue("@pctAccountRisked", pctAccountRisked);
cmd.Parameters.AddWithValue("@tradeSetupId", tradeSetupId);
cmd.Parameters.AddWithValue("@lotsPerUnit", lotsPerUnit);
cmd.Parameters.AddWithValue("@tfCode", chartTimeFrame);
cmd.Parameters.AddWithValue("@MAEPips", MAEPips);
cmd.Parameters.AddWithValue("@MFEPips", MFEPips);
cmd.Parameters.AddWithValue("@tradeGrade", tradeGrade);
cmd.Parameters.AddWithValue("@executionGrade", executionGrade);
return (InsertData(cmd, "trade"));
}
Есть несколько нетребуемые полей: tradeGrade, executionGrade, MFEPips, MAEPips. Хранимая процедура usp_InsertTrade предоставляет эти необязательные параметры как NULLable. Каков наилучший способ кодировать это в C#? Я учусь программировать, поэтому было бы здорово, если бы вы могли предложить рекомендации по лучшей практике.
Вот сохраненные параметры процедуры для usp_InsertTrade:
CREATE procedure [dbo].[usp_InsertTrade]
@symbol char(6),
@tradeSetupId varchar(10),
@tradeTypeId int,
@lotsPerUnit decimal(18,1),
@chartTimeFrame varchar(5),
@tradeGrade smallint = NULL,
@executionGrade smallint = NULL,
@MFEPips int = NULL,
@MAEPips int = NULL,
@pctAccountRisked decimal(3,2)
AS
Большое спасибо.
UPDATE
Я изменил свою функцию, так что дополнительные параметры находятся в нижней части. Как так:
public int InsertTrade(
string symbol,
string tradeSetupId,
int tradeTypeId,
decimal lotsPerUnit,
string chartTimeFrame,
decimal pctAccountRisked,
int? tradeGrade,
int? executionGrade,
int? MFEPips,
int? MAEPips
)
{
SqlCommand cmd = new SqlCommand("usp_InsertTrade");
// required parameters
cmd.Parameters.AddWithValue("@symbol", symbol);
cmd.Parameters.AddWithValue("@tradeSetupId", tradeSetupId);
cmd.Parameters.AddWithValue("@tradeTypeId", tradeTypeId);
cmd.Parameters.AddWithValue("@lotsPerUnit", lotsPerUnit);
cmd.Parameters.AddWithValue("@tfCode", chartTimeFrame);
cmd.Parameters.AddWithValue("@pctAccountRisked", pctAccountRisked);
// optional parameters
if (MAEPips.HasValue)
cmd.Parameters.AddWithValue("@MAEPips", MAEPips);
if (MFEPips.HasValue)
cmd.Parameters.AddWithValue("@MFEPips", MFEPips);
if (tradeGrade.HasValue)
cmd.Parameters.AddWithValue("@tradeGrade", tradeGrade);
if (executionGrade.HasValue)
cmd.Parameters.AddWithValue("@executionGrade", executionGrade);
return (InsertData(cmd, "trade"));
}
Когда я вызвать функцию, используя этот код:
DBUtil DB = new DBUtil();
int tradeId = DB.InsertTrade (
ddlSymbols.SelectedValue,
ddlTradeSetups.SelectedValue,
ddlTradeTypes.SelectedValue,
decimal.Parse(txtLotsPerUnit.Text),
ddlTimeFrames.Text,
decimal.Parse(txtAcctRisk.Text));
Я получаю эту ошибку:
No overload for method 'InsertTrade' takes 6 arguments
вы не указали в объявлении параметра = null - это вызывает вашу ошибку. – Paddy
@Paddy - спасибо, нужен кофе ... –
Кроме того, я думаю, вам, возможно, понадобится указать null в ваш тип с нулевым значением. Например; 'Int? сделкаGrade = (int?) null'. –