![](/img/trans.png)
[英]Error converting data type nvarchar to int - while executing stored procedure
[英]Trying to Insert data into tables via Stored Procedure. Keep getting Error converting data type nvarchar to int
所以我的問題是,當我嘗試通過使用存儲過程將數據從視圖傳遞到控制器以輸入4個表時,出現“將數據類型從nvarchar轉換為int的錯誤” sql異常。 其中三個表在一個表中具有外鍵,其中兩個外鍵填充一個下拉列表,最后一個外鍵將文件上載到目錄。
我嘗試更改字段的數據類型,但仍然收到錯誤。 我也將控制器代碼與具有相同實現的控制器代碼進行了比較,只是少了一張表,而且代碼看起來還不錯。
我想知道實際上是什么導致此錯誤,以及如何解決和解決它。
我的觀點特別是外鍵部分:
<div class="form-group">
@Html.LabelFor(model => model.colourID, "Colour", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("colourID", String.Empty)
@Html.ValidationMessageFor(model => model.colourID)
</div>
</div>
<div class="editor-label">
<label> Upload FCC Logo </label>
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Upload, new { type = "file" })
@Html.ValidationMessageFor(model => model.Upload)
</div>
<div class="form-group">
@Html.LabelFor(model => model.formatID, "formatID", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("formatID", String.Empty)
@Html.ValidationMessageFor(model => model.formatID)
</div>
</div>
我的控制器的創建方法:
public ActionResult Create()
{
ViewBag.colourID = new SelectList(db.Colours, "colourDesc", "colourDesc");
ViewBag.logoDocID = new SelectList(db.FCCLogoDocs, "logoDocID", "logoDocTitle");
ViewBag.formatID = new SelectList(db.Formats, "formatID", "formatName");
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CreateFCCLogoViewModel createLogo)
{
if (ModelState.IsValid)
{
var doc = createLogo.Upload;
var temp = "";
var temp2 = "";
if (doc.ContentLength > 0)
{
var docName = Path.GetFileName(doc.FileName);
var path = Path.Combine("/Content/FCCLogoDocs", docName);
temp = Path.Combine("/Content/FCCLogoDocs", docName);
temp2 = docName;
doc.SaveAs(Server.MapPath(path));
}
else
{
temp2 = "No documentation available";
}
SqlParameter pName = new SqlParameter("@Name", createLogo.name);
SqlParameter pDesc = new SqlParameter("@Desc", createLogo.desc);
SqlParameter pYear = new SqlParameter("@Year", createLogo.year);
SqlParameter pColourID = new SqlParameter("@ColourID", createLogo.colourID);
SqlParameter pDocPath = new SqlParameter("@DocPath", temp);
SqlParameter pDocName = new SqlParameter("@DocName", temp2);
SqlParameter pFormatID = new SqlParameter("@FormatID", createLogo.formatID);
db.Database.ExecuteSqlCommand("spCreateFCCLogo @Name,@Desc, @Year,@ColourID,@DocPath, @DocName, @FormatID",
pName, pDesc, pYear, pColourID, pDocPath, pDocName, pFormatID);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.colourID = new SelectList(db.Colours, "colourID", "colourDesc", createLogo.colourID);
ViewBag.formatID = new SelectList(db.Formats, "formatID", "formatName", createLogo.formatID);
return View(createLogo);
}
我的存儲過程:
CREATE PROCEDURE [dbo].[spCreateFCCLogo]
@Name varchar(300),
@Desc varchar(300),
@Year DateTime,
@ColourID int,
@FormatID int,
@DocName varchar(300),
@DocPath varchar(300)
AS
BEGIN
DECLARE @DocID int
INSERT INTO [dbo].[FCCLogoDoc]([logoDocPath],[logoDocTitle])
VALUES(@DocPath,@DocName)
SELECT @DocID = SCOPE_IDENTITY()
INSERT INTO [dbo].[FCCLogo]([name],[desc],[year],[colourID],[logoDocID],[formatID])
VALUES(@Name,@Desc,@Year,@ColourID,@DocID,@FormatID)
END
亞倫·伯特蘭(Aaron Bertrand)回答了問題。 問題是與代碼相比,在存儲過程中聲明參數的順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.