0

こんにちはすべて私はストアドプロシージャにいくつかのパラメータを渡すメソッドを持っています、そしてそれを実行すると私はこのエラーを受け取ります

[マテリアライズされた'System.Int32'型から'System.String'型への指定されたキャストは無効です。]

これが私がストアドプロシージャと呼んでいる方法です

  public JsonResult CreatedBugs()
    {
        int year;
        int month;
        int projectid;
        year = 2012;
        month = 8;
        projectid = 16;
        var loggedbugs = db.ExecuteStoreQuery<LoggedBugs>("LoggedBugs @Year,@Month,@ProjectID", new SqlParameter("@Year",year ), new SqlParameter("@Month",  month ), new SqlParameter("@ProjectID", projectid )).ToList();
        var ClosedBugs = db.ExecuteStoreQuery<LoggedBugs>("ClosedBugs @Year,@Month,@ProjectID", new SqlParameter("@Year", year), new SqlParameter("@Month", month), new SqlParameter("@ProjectID", projectid)).ToList();
        var model = new LoggedBugs
        {
            LoggedBugsCount = loggedbugs,
            ClosedBugs = ClosedBugs
        };
        return Json(model, JsonRequestBehavior.AllowGet);
    }  

これが私のストアドプロシージャです

      alter procedure LoggedBugs
      (
      @Year int,
      @Month int,
      @ProjectID int
      )
      as
      begin
       SELECT projectName,
    ProjectYear,
    ProjectMonth, 
      Week1, Week2, Week3, Week4, Week5
          FROM (
 Select  p.projectName,YEAR(b.CreatedDate) ProjectYear, MONTH(b.CreatedDate) ProjectMonth,
        'Week' + CAST(DATEDIFF(week, DATEADD(MONTH, DATEDIFF(MONTH, 0, b.CreatedDate), 0), b.CreatedDate)+1 AS VARCHAR) as [Weeks],
        b.BUGID
From    BUGS b inner join projects p on b.ProjectId = p.ProjectId
Where   DatePart(year, CreatedDate) = @Year and datepart(month, Createddate) = @Month and b.projectid = @ProjectID 
  ) p
   PIVOT (COUNT(BUGID) FOR [Weeks] IN (WEEK1, WEEK2, WEEK3, Week4, Week5)) AS pvt
 end

私はここで間違っているのはどこですか

編集1

これが私のLoggedBugクラスです

 public class LoggedBugs
{
    public string projectName { get; set; }
    public string ProjectYear { get; set; }
    public string ProjectMonth { get; set; }
    public string Week1 { get; set; }
    public string Week2 { get; set; }
    public string Week3 { get; set; }
    public string Week4 { get; set; }
    public string Week5 { get; set; }
    public IEnumerable<LoggedBugs> LoggedBugsCount { get; set; }
    public IEnumerable<LoggedBugs> ClosedBugs { get; set; }
}
4

2 に答える 2

1

とに問題がある可能性がProjectYearありProjectMonthます。データベース側ではint、それらはです。したがって、.NET側では、それらは適切にボックス化されていませんSystem.Int32。あなたの実体では、彼らはstringです。spに変換するvarcharか、エンティティのタイプをに変更してみてくださいint

于 2012-08-28T18:03:09.040 に答える
0

ProjectYearプロパティとProjectMonthプロパティを変更して、LoggedBugsクラスにintと入力します。YEAR関数とMONTHsql関数はどちらもint型の値を返すため、SQLはそれらをintとして返します。YEARSQLMSDNの説明を参照してください。C#コードは文字列を想定しているため、型の不一致の例外が発生します。

于 2012-09-03T21:15:28.260 に答える