2012-04-24 113 views
0

我需要通過執行存儲過程通過linq操作來訪問數據。 請看下面我的代碼。告訴我我哪裏出錯了。Linq to sql連接(存儲過程)拋出拋出異常

public int ID { get; set; } 
public string CategoryName { get; set; } 

public static void GetCategory() 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString; 
    var query = "EXEC SP_GET_ALL_CATEGORY"; // my stored procedure which is in SQL server 
    using (DataContext dc = new DataContext(connectionString)) 
    { 
     if (dc.DatabaseExists()) 
     { 
      var _vGetCategory = dc.ExecuteQuery<category>(string.Format(query, 1, "null")).ToList(); // execution should only through Stored Procedures 

      for (int i = 0; i < _vGetCategory.Count; i++) 
      { 
       string _strName = _vGetCategory[i].CategoryName; 
      } 
     } 
    } 

和我的例外:

System.InvalidCastException was unhandled by user code 
    Message=Specified cast is not valid. 
    Source=System.Data 
    StackTrace: 
     at System.Data.SqlClient.SqlBuffer.get_Int32() 
     at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) 
     at Read_category(ObjectMaterializer`1) 
     at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 
     at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
     at category.GetCategory() in d:\Shankar\sample\LinqtoSql\App_Code\category.cs:line 28 
     at _Default.Page_Load(Object sender, EventArgs e) in d:\Shankar\sample\LinqtoSql\Default.aspx.cs:line 8 
     at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
     at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
     at System.Web.UI.Control.OnLoad(EventArgs e) 
     at System.Web.UI.Control.LoadRecursive() 
     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    InnerException: 
    } 
+0

什麼是存儲過程是什麼樣子?我的猜測是你的代碼正在尋找一個類別對象,但你的proc正在返回一個結果集,你需要將該結果集轉換爲一個類別。 – Brian 2012-04-24 13:06:48

+0

@布賴恩我的存儲過程包含選擇查詢....我如何解決此問題... – 2012-04-24 13:18:24

+0

而不是調用存儲過程你可以做一個linq查詢對實體? – Brian 2012-04-24 13:38:09

回答

0

使用的Int64對於以數據列聲明BIGINT數據類型...它爲我的作品...

1

這樣看來它不能轉換回來作爲分類成一個Int32數據。是否有可能返回空值?或者Int32的Min/Max以外的值?

+0

所以我需要做的...... – 2012-04-25 06:41:03

+0

運行存儲過程,看看有什麼數據回來,驗證沒有爲空,所有都在int.min和int.max範圍內 – taylonr 2012-04-25 12:21:07