markrendle / Simple.Data

A light-weight, dynamic data access component for C# 4.0
MIT License
1.33k stars 303 forks source link

Executing proc that returns an empty result set causes a "Null reference exception" when assigned to a List<> #372

Closed Porkstone closed 8 years ago

Porkstone commented 8 years ago

Exception occurs here: List<QueuedMessage> messages = _db.WorkNextMessage((int)queueType, userId);

WorkNextMessage is a stored procedure that will sometimes return an empty result set.

Is there a way to check if the result set is empty before attempting to assign it to the list, would this help?

Stack trace: at Simple.Data.SimpleResultSet.DynamicEnumerator..ctor(IEnumerable1 source) at Simple.Data.SimpleResultSet.GetEnumerator() at System.Linq.Enumerable.<OfTypeIterator>d__aa1.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Simple.Data.ConcreteCollectionTypeCreator.Creator.TryConvertElements(Type type, IEnumerable items, Array& result) at Simple.Data.ConcreteCollectionTypeCreator.GenericListCreator.TryCreate(Type type, IEnumerable items, Object& result) at Simple.Data.ConcreteCollectionTypeCreator.TryCreate(Type type, IEnumerable items, Object& result) at Simple.Data.SimpleResultSet.TryConvert(ConvertBinder binder, Object& result) at CallSite.Target(Closure , CallSite , Object ) at EMF.Connectors.Db.GetNextMessageToWork(QueueType queueType, Int32 userId) in c:\Users\CharlieBarker\Dropbox\Development\OpenSource\EmailFlow\EMF.Connectors\Db.cs:line 96 at EMF.Connectors.Processor.WorkNextMessage(Int32 userId, QueueType queueType) in c:\Users\CharlieBarker\Dropbox\Development\OpenSource\EmailFlow\EMF.Connectors\Processor.cs:line 106 at Queues_Search.btnWorkNext_Click(Object sender, EventArgs e) in c:\Users\CharlieBarker\Dropbox\Development\OpenSource\EmailFlow\EmailFlowWebUi\Queues\Search.aspx.cs:line 64 at System.Web.UI.WebControls.Button.OnClick(EventArgs e) at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.d__14.MoveNext()

Porkstone commented 8 years ago

I had a Return statement in my stored proc that would execute if now rows were found, I changed this to select from Table where 1 = 0 to return an empty rowset and everything works.