我想编辑记录,但我无法打开Edit
局部视图。当我点击Edit
链接时,它发送给我TrackerId
但我没有在模型中看到任何记录。这是错误:
System.Data.SqlClient.SqlException:'过程或函数'GetUpdateHorseTracker'期望参数'@horseId',这是未提供的。
调节器:
[HttpGet]
public ActionResult Edit(int TrackerId)
{
ClsHorseTracker clsHorseTracker = new ClsHorseTracker();
var model = horseTrackerDetails.EditHTRecord(clsHorseTracker).Find(s => s.TrackerId == TrackerId);
return PartialView("_pEdit", model);
}
方法:
public List<ClsHorseTracker> EditHTRecord(ClsHorseTracker clsHorseTracker)
{
List<ClsHorseTracker> cHorse = new List<ClsHorseTracker>();
SqlParameter[] prms = new SqlParameter[3];
string sSQL;
sSQL = "exec HorseTrackerUpdate @TrackerId";
prms[0] = new SqlParameter("@TrackerId", SqlDbType.Int);
prms[0].Value = clsHorseTracker.TrackerId;
prms[1] = new SqlParameter("@horseId", SqlDbType.Int);
prms[1].Value = clsHorseTracker.HorseId;
prms[2] = new SqlParameter("@horsetype", SqlDbType.Int);
prms[2].Value = clsHorseTracker.HorseTypeId;
ds = clsUtilities.CreateCommandwithParams(sSQL, prms);
DataTable dataTable = ds.Tables[0];
foreach (DataRow dr in dataTable.Rows)
{
cHorse.Add(
new ClsHorseTracker
{
HorseId = Convert.ToInt32(dr["HorseId"]),
HorseTypeId = Convert.ToInt32(dr["horsetype"])
});
}
return cHorse;
}
}
public DataSet CreateCommandwithParams(string queryString, SqlParameter[] prms)
{
string mConnString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
using (SqlConnection conn = new SqlConnection(mConnString))
{
SqlCommand cmd = new SqlCommand(queryString, conn);
cmd.CommandType = CommandType.Text;
if (prms != null)
{
foreach (SqlParameter p in prms)
{
cmd.Parameters.Add(p);
}
}
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
conn.Open();
da.Fill(ds);
return ds;
}
}
局部视图:
@foreach (var item in Model)
{
<tr>
<td>
@item.HorseId
</td>
<td>
@item.HorseName
</td>
<td>
@item.Sire
</td>
<td>
@item.Dam
</td>
<td>
@item.HorseTypeName
</td>
<td>
@Ajax.ActionLink("Edit", "Edit", "HorseTracker", new { TrackerId = @item.TrackerId}, new AjaxOptions { UpdateTargetId = "div-for-partial" }, null) |
</td>
</tr>
程序:
Alter PROCEDURE [dbo].[HorseTrackerUpdate]
@TrackerId int,
@horsetype int,
@updatedby varchar(50),
@updatedon datetime,
@notes varchar(500)
AS
BEGIN
SET NOCOUNT ON;
update HorseTracker
set
HorseType=isnull(@horsetype,HorseType),
UpdatedBy=ISNULL(@updatedby,UpdatedBy),
UpdatedOn=ISNULL(@updatedon,UpdatedOn),
Notes=ISNULL(@notes,Notes)
where TrackerId=@TrackerId
END
发布于 2018-08-13 11:21:31
假设你有这样的GetUpdateHorseTracker
存储过程:
ALTER PROCEDURE [schemaName].GetUpdateHorseTracker
@TrackerId INT,
@horseId INT,
@horsetype INT
AS
BEGIN
-- select statement here
END
然后,你应该包括所有这些声明的过程参数,因为未设置这些参数的默认值:
SqlParameter[] prms = new SqlParameter[3];
// include all parameters
string sSQL = "exec GetUpdateHorseTracker @TrackerId, @horseId, @horseType";
prms[0] = new SqlParameter("@TrackerId", SqlDbType.Int);
prms[0].Value = clsHorseTracker.TrackerId;
prms[1] = new SqlParameter("@horseId", SqlDbType.Int);
prms[1].Value = clsHorseTracker.HorseId;
prms[2] = new SqlParameter("@horsetype", SqlDbType.Int);
prms[2].Value = clsHorseTracker.HorseTypeId;
如果要在SqlCommand
查询字符串中不指定某个参数,则必须按存储过程文档中的说明设置其默认值:
如果为参数定义了默认值,则可以在不指定该参数的值的情况下执行该过程。默认值必须是常量,或者可以为NULL。
此外,如果要直接使用参数执行存储过程,请设置cmd.CommandType = CommandType.StoredProcedure
而不是cmd.CommandType = CommandType.Text
。
https://stackoverflow.com/questions/-100002091
复制相似问题