我想知道如何避免为所有页面一次又一次地编写cmd.Parameter.addwithvalue。总之,像是通用插入函数。我没有使用实体框架,因此添加实体的常规通用功能将无济于事。
到目前为止,我已经尝试过:
public string AddCampus(Campus objCampus)
{
//string Params = "@Activity,@Name,@PhoneNo,@Email,@Logo,@StatusId,@CountryId,@CityId,@StateId,@DistrictId,@ClientId,@Pincode,@AddressLine1,@AddressLine2,@Area,@Street";
//string Values = "Add" + ',' + objCampus.Name + ',' + objCampus.PhoneNo + ',' + objCampus.Email + ',' + objCampus.Logo + "," + objCampus.StatusId + ","+objCampus.CampusAddress.CountryId + "," + objCampus.CampusAddress.CityId + "," + objCampus.CampusAddress.StateId + "," + objCampus.CampusAddress.DistrictId + "," + objCampus.ClientId + "," + objCampus.CampusAddress.Pincode + "," + objCampus.CampusAddress.AddressLine1 + "," + objCampus.CampusAddress.AddressLine2 + "," + objCampus.CampusAddress.Area + "," + objCampus.CampusAddress.Streat;
//return Connection.CommandExecuteNonQuery(Params, Values,true, "sprCampus");
}
我做到了,它奏效了,但我刚刚说过。这就是实现方式:
public static string CommandExecuteNonQuery(string Parameters,string Values,bool IsStoredProcedure,string command)
{ string[] Parameter = Parameters.Split(',');
string[] Value = Values.Split(',');
string s_Message = "";
if (Parameter.Count() < Value.Count())
{
s_Message = "Number of Paramters Supplied is less than Number of Values Supplied.";
return s_Message;
}
else if (Parameter.Count() > Value.Count())
{
s_Message = "Number of Values Supplied is less than Number of Parameters Supplied.";
return s_Message;
}
else
{
SqlCommand cmd = new SqlCommand();
for (var i = 0; i < Parameter.Count(); i++)
{
cmd.Parameters.AddWithValue(Parameter[i], Value[i]);
}
cmd.CommandText = command;
if (IsStoredProcedure)
cmd.CommandType = CommandType.StoredProcedure;
string saveSuccess = string.Empty;
int execute = 0;
using (SqlConnection con = new SqlConnection(sqlConStr))
{
try
{
con.Open();
cmd.Connection = con;
execute = cmd.ExecuteNonQuery();
if (execute > 0)
{
s_Message = "Record Saved";
}
else
s_Message = "Operation Failed";
}
catch (Exception excp)
{
s_Message = excp.Message;
}
}
}
return s_Message.ToString();
}
所以我只是在寻找比这更好的解决方案。
答案 0 :(得分:1)
前段时间我有相同的想法。以下内容可能不是最优化的解决方案,但是我认为它非常不错。
// Parameter used for StoredProcedure
private class Parameter
{
public Parameter(string name, object value)
{
Name = name;
Value = value;
}
public readonly string Name;
public readonly object Value;
}
// Executes a given stored procedure with parameters and returns a SQLDataReader
private static SqlDataReader ExecuteDataReader(string name, SqlConnection dbConnection, List<Parameter> parameters = null)
{
if (parameters == null)
parameters = new List<Parameter>();
using (var command = new SqlCommand(name, dbConnection) { CommandType = CommandType.StoredProcedure })
{
foreach (var parameter in parameters)
command.Parameters.AddWithValue(parameter.Name, parameter.Value);
return command.ExecuteReader();
}
}
// Executes a given stored procedure with parameters
private static void ExecuteNonQuery(string name, SqlConnection dbConnection, List<Parameter> parameters = null)
{
if (parameters == null)
parameters = new List<Parameter>();
using (var command = new SqlCommand(name, dbConnection) { CommandType = CommandType.StoredProcedure })
{
foreach (var parameter in parameters)
command.Parameters.AddWithValue(parameter.Name, parameter.Value);
command.ExecuteNonQuery();
}
}