[英]optional parameters in stored procedure
我正在使用mvc構建網站,並希望使用包含一組參數的存儲過程來保存一些數據。 我想知道是否可以將其中一些參數設置為可選參數。 原因是發送回的數據取決於帳戶類型。 如果用戶編輯帳戶類型1,則必須將所有參數發送回;如果他們編輯帳戶類型2,則僅將3參數發送回。
sql參數:
alter PROCEDURE web.Maint_UpdateClinic
@AccountID INT
,@IsActive BIT = 1
,@AccountName VARCHAR(100) = NULL
,@AccountAddress VARCHAR(100) = NULL
,@City VARCHAR(100) = NULL
,@State VARCHAR(2) = NULL
,@ZipCode VARCHAR(10) = NULL
,@PhoneNumber VARCHAR(20) = NULL
,@WebID INT
控制器調用過程中的操作:
using (OdbcConnection _conn = new OdbcConnection("FILEDSN=c:\\datasources\\RxCard.dsn"))
using (OdbcCommand cmd1 = new OdbcCommand())
{
cmd1.Connection = _conn;
cmd1.CommandText = "{call web.Maint_UpdateClinic(?,?,?,?,?,?,?,?,?)}";
cmd1.Parameters.AddWithValue("@AccountID", AccountID);
cmd1.Parameters.AddWithValue("@IsActive", true);
cmd1.Parameters.AddWithValue("@AccountName", AccountName);
cmd1.Parameters.AddWithValue("@Address", Address);
cmd1.Parameters.AddWithValue("@City", City);
cmd1.Parameters.AddWithValue("@State", State);
cmd1.Parameters.AddWithValue("@ZipCode", ZipCode);
cmd1.Parameters.AddWithValue("@PhoneNumber", PhoneNumber);
cmd1.Parameters.AddWithValue("@WebID", CookieStore.GetCookie("WebId"));
cmd1.CommandType = CommandType.StoredProcedure;
_conn.Open();
cmd1.ExecuteNonQuery();
_conn.Close();
}
如果參數在存儲過程中是可選的,則可以選擇是否添加它們。 例如,如果您刪除此行(上方)
cmd1.Parameters.AddWithValue("@AccountName", AccountName);
然后存儲過程將使用默認值@AccountName
。
這意味着您只需要一種確定是否傳遞每個參數的方法。 如何做到這一點很難回答,因為這取決於應用程序的行為。
例如,您可以這樣做:
if(AccountName != null)
cmd1.Parameters.AddWithValue("@AccountName", AccountName);
換句話說,如果沒有為AccountName
提供值,則不要將其發送給過程。 只要您不需要使用此方法將AccountName
設置為null
,該方法就起作用。
您可以將一個參數傳遞給該方法,以指示帳戶類型是什么,然后使用該參數確定要添加的參數和要省略的參數。
我注意到您為每個值( Account
, Address
等)都有單獨的變量,如果將它們放入類中,使用起來可能會更容易
public class ClinicUpdate
{
public string AccountId {get;set;}
public string Address {get;set;}
//etc
}
如果您決定重新排列代碼,則可以輕松得多。 例如,您可能決定采用兩種方法-一種為一種類型的帳戶添加參數,另一種為另一種類型的帳戶添加參數。 如果要傳遞單個對象而不是一大堆參數,那會容易得多。
無論如何,這是個好習慣。 意見不一,但我建議每個方法調用最多四個參數。 如果發現自己將相似的參數列表傳遞給許多方法,則可能需要為它們提供一個類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.