我需要通過執行存儲過程通過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:
}
什麼是存儲過程是什麼樣子?我的猜測是你的代碼正在尋找一個類別對象,但你的proc正在返回一個結果集,你需要將該結果集轉換爲一個類別。 – Brian 2012-04-24 13:06:48
@布賴恩我的存儲過程包含選擇查詢....我如何解決此問題... – 2012-04-24 13:18:24
而不是調用存儲過程你可以做一個linq查詢對實體? – Brian 2012-04-24 13:38:09