我在ASP.NET 4.0和C#中使用.NET 4.0(會不會是C#4.0?)。對方法重載感到困惑
我要插入一些數據我的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 2010-11-08 11:40:43
@Paddy - 謝謝,需要咖啡...... – 2010-11-08 11:44:41
另外,我認爲你可能需要將空值轉換爲空值類型。例如; '詮釋? tradeGrade =(int?)null'。 – 2010-11-08 11:46:12