I'm receiving the below exception when I launch the page for debugging. The objectDataSource is configured for an ADO TableAdapter which queries an oracle database. The ods is then bound to an ASP.NET Gridview. I am coding against .NET 4.0.
If I leave the gridview unbound, there are no problems when launching. I can do as much as completely configure the ods, define columns and row behavior for the gridview, etc, and there are no issues. I am using (to my knowledge) the same methodology that I have successfully used many times in the past to access and display the data. I've been through the code as closely as I can imagine, and haven't been able to pick out the problem.
Exception Info:
Capabilities:Type=IE7,Name=IE,Version=7.0,MajorVersion=7,MinorVersion=0,Platform=WinNT,IsBeta=False,IsCrawler=False,IsAOL=False,IsWin16=False,IsWin32=True,SupportsFrames=True,SupportsTables=True,SupportsCookies=True,Ecmascriptversion=3.0,SupportsVBScript=True,SupportsJavaApplets=True,SupportsActiveXControls=True,CDF= False
Inner Exception Type: System.Reflection.TargetInvocationException Inner Exception: Exception has been thrown by the target of an invocation.
Inner Source: mscorlib
Inner Stack Trace: at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance)
at System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.GridView.DataBind()
at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()
The Markup:
<asp:GridView ID="gvGradename" runat="server" AutoGenerateColumns="False"
DataKeyNames="GRADENAME_ID" DataSourceID="odsGradename">
<Columns>
//Which columns are displayed are irrelevant. The error occurs with any columns, including none.
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="odsGradename" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetDataByActiveName"
TypeName="pts.PTSTableAdapters.PTS_GRADENAMETableAdapter">
</asp:ObjectDataSource>
The query:
select gn.gradename_id
, gn.mill_id
, case when gn.gradename_id = 0 then upper(gn.name) else initcap(gn.name) end name
, m.name millname
, gn.audit_id
, gn.audit_dtm
, gn.audit_insert_dtm
, gn.audit_process_code
, gn.description
, gn.roll_width_threshold
from pts_gradename gn
, pts_mill m
where gn.is_generic = 1
and gn.is_active = 1
and gn.mill_id = m.mill_id
order by case when gn.gradename_id = 0 then null else initcap(gn.name) end nulls first
I'm not doing anything with it in the code-behind, at the moment.
EDIT: included tablenames in the query, where they had been redacted, previously.
Also, I can preview the data in the table adapter, and receive the expected information, so it appears not to be a problem with the query itself.
The problem was with the auto-generated Fill method associated with the datatable. I wasn't able to determine what exactly the problem was, but deleting it and starting over fixed the problem.
Not really a great answer, but it was the solution to this particular issue.
Related
I have a list of location codes that are a concatenation of BUILDING/ROOM i.e. "BLD23223019" where the first 5 characters are the building. I split building code from the string and display it in one list for the user to select which then takes the user to a list of rooms within that building. So I pass the building code to the Room list to filter the rooms and I do this like:
_realm = Realm.GetInstance(RealmInstance.RealmPath);
try
{
_locations = _realm.All<Building>().Where(x => x.BuildingCode.Contains(_room.RoomCode)).ToList();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
ListViewLocations.ItemsSource = _locations;
but it doesn't give me any results, instead I get a target invocation error and the inner exception is "This object belongs to a closed realm." This also happens if I use "Equals(_room.RoomCode). I can't understand why the realm would be closed just from the above code.
I'm new to Realm so maybe I'm doing something wrong, if anyone can point me in the right direction it would be much appreciated.
This is the inner exception that the above code throws
at Realms.NativeException.ThrowIfNecessary (System.Func`2[T,TResult]
overrider) [0x0000a] in
/Users/realm/jenkins/workspace/realm_realm-dotnet_PR-1775/Realm/Realm/Native/NativeException.cs:57
at Realms.MarshalHelpers.GetString
(Realms.MarshalHelpers+NativeCollectionGetter getter) [0x0002b] in
/Users/realm/jenkins/workspace/realm_realm-dotnet_PR-1775/Realm/Realm/MarshalHelpers.cs:55
at Realms.ObjectHandle.GetString (System.IntPtr propertyIndex)
[0x00013] in
/Users/realm/jenkins/workspace/realm_realm-dotnet_PR-1775/Realm/Realm/Handles/ObjectHandle.cs:258
at Realms.RealmObject.GetStringValue (System.String propertyName)
[0x00000] in
/Users/realm/jenkins/workspace/realm_realm-dotnet_PR-1775/Realm/Realm/RealmObject.cs:139
at AsssetMan.Models.Buildings.get_BuildingCode () [0x00014] in
D:\Projects\AssetManRealm\AssetMan\AssetMan\Models\Buildings.cs:8
at (wrapper managed-to-native)
System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj,
System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder
binder, System.Object[] parameters, System.Globalization.CultureInfo
culture) [0x00032] in <43dbbdc147f2482093d8409abb04c233>:0
Thanks to #mjwills I've figured it out. the first comment using var bob in the linq extension worked if I used a literal. That meant there had to be a problem with the variable or the way I was passing the BuildingCode to the RoomCode page. The message "Realm is closed", or something to that effect, had me stumped at first then I remembered that the Realm objects are "Live" and as I was closing the _realm on the previous page, the building object I was passing to the RoomCode page was no longer available. So I new'd up a building object and when the building was selected from the list of buildings, copied the building code into it and passed that to the lookup for the RoomCode so the BuildingCode was still available after the Realm is closed.
Thanks #mjwills.
I've got a MvxTableViewCell that contains a UILabel where I'd like to bind / set the attributedText on. What I have appears to work (on screen), but I'm getting these errors along side of it all:
2014-12-16 17:35:59.626 clientTouch[51481:1311271] MvxBind:Error: 13.25 Problem seen during binding execution for binding AttributedText for NotificationAttributedText - problem TargetInvocationException: Exception has been thrown by the target of an invocation.
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0005c] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:238
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Reflection/MethodBase.cs:114
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxPropertyInfoTargetBinding.SetValueImpl (System.Object target, System.Object value) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Bindings.Target.MvxConvertingTargetBinding.SetValue (System.Object value) [0x00000] in <filename unknown>:0
at Cirrious.MvvmCross.Binding.Bindings.MvxFullBinding.UpdateTargetFromSource (System.Object value) [0x00000] in <filename unknown>:0
InnerException was ArgumentNullException: Argument cannot be null.
Parameter name: value
at MonoTouch.UIKit.UILabel.set_AttributedText (MonoTouch.Foundation.NSAttributedString value) [0x0000b] in /Developer/MonoTouch/Source/monotouch/src/build/compat/UIKit/UILabel.g.cs:272
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00044] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Reflection/MonoMethod.cs:230
The specific binding in question that is producing the above issue is this:
this.DelayBind (() => {
var set = this.CreateBindingSet<NotificationsCellView, NotificationActivitySubViewModel>();
set.Bind(NameUiLabel)
.For(v => v.AttributedText)
.To(vm => vm.NotificationAttributedText)
.WithConversion("StringToAttributedTextTest");
... more bindings here ...
}
The real StringToAttributedText code is a bit long, so I made a super trivial one (StringToAttributedTextTest) which produces the same issue:
public class StringToAttributedTextTestConverter: MvxValueConverter<string, NSMutableAttributedString>
{
protected override NSMutableAttributedString Convert(
string value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
return new NSMutableAttributedString("hi honey", UIFont.FromName("Courier", 13f));
}
}
Like I said -- it renders fine, but it does generate those warnings, which seem bad to me.
Given the above value "converter" is ignoring the data source all together it would seem to point at an incorrect value converter implementation, but it's just a line of code at this point!
Further isolating the issue, when I replace the binding to just use regular text, and binding that with a plain old string from the view model, I get no warnings at all (of course I loose the attributed text that way).
set.Bind(NameUiLabel).For(v => v.Text).To(vm => vm.NotificationAttributedText);
Any help would be highly appreciated!
The warnings will be generated because when an MvxTableViewCell is reused, then its binding context is set to null. This will cause the bindings to use their fallback values - which by default are also null.
To workaround this issue (to remove the warnings), you could try setting string.Empty fallback values for your bindings within the cell.
For more on Fallback behavior, search for UnsetValue - Mvx tries to mimic WPF in this area.
For those that want more detail on Stuart's help, here is how I got rid of the warnings.
In the View Class, I create a blankAttribString:
private NSAttributedString blankAttribString;
and initialize it to an empty attributed string with a plain font / size:
blankAttribString = new NSMutableAttributedString(string.Empty, UIFont.FromName("Courier", 13f));
The point of blankAttribString is just there to provide a 'nothing' -- so string.Empty is what I pass into the NSAttributedString. Finally, when it comes to binding time, here is how that looks like:
set.Bind(NameUiLabel)
.For(v => v.AttributedText)
.To(vm => vm.NotificationAttributedText)
.WithConversion("StringToAttributedText")
.WithFallback(blankAttribString);
Above, "StringToAttributedText" converter takes a regular string and generates an attributed string in an app-specific way... but the question wasn't really about how to do that part of it. It was really about how to get the fallback to work.
Hope that helps.
We are querying database using LINQ-SQL and then storing resulting master table objects in HTTP cache.
Later, the master objects are being used to query its children, using lazy loading. Here are the relevant pieces of code - I have recreated the scenario in a new proof-of-concept app:
if (HttpRuntime.Cache["c"] == null)
{
LockApp.Models.DBDataContext db = new Models.DBDataContext();
var master = db.Masters.ToList();
HttpRuntime.Cache.Add("c", master,
null, DateTime.Now.AddMonths(1),
TimeSpan.Zero, CacheItemPriority.Normal, null);
}
ViewBag.Data = (List<LockApp.Models.Master>)HttpRuntime.Cache["c"];
And here's the razor view that is iterating over master and detail objects:
#foreach(var m in ViewBag.Data){
#m.Id<nbsp></nbsp>
foreach(var d in m.Details){
#d.Id<nbsp></nbsp>
}
<br />
}
It works perfectly fine and caches the data correctly. However, it fails when there are multiple requests trying to hit the web site after cache is cleared - I am testing this using JMeter, basically hitting the site with many (50) parallel threads, and then touching web.config - I immediately start seeing one of the following two errors:
Index was outside the bounds of the array
at foreach(var d in m.Details)
this error never goes away, i.e. some data gets corrupted in cache
with following stack:
System.Collections.Generic.List`1.Add(T item) +34
System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) +305
System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +59
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118
System.Data.Linq.SqlClient.CompiledQuery.Execute(IProvider provider, Object[] arguments) +99
System.Data.Linq.DeferredSourceFactory`1.ExecuteKeyQuery(Object[] keyValues) +402
System.Data.Linq.DeferredSourceFactory`1.Execute(Object instance) +888
System.Data.Linq.DeferredSource.GetEnumerator() +51
System.Data.Linq.EntitySet`1.Load() +107
System.Data.Linq.EntitySet`1.GetEnumerator() +13
System.Data.Linq.EntitySet`1.System.Collections.IEnumerable.GetEnumerator() +4
ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\prc0092\Documents\Visual Studio 2012\Projects\LockApp\LockApp\Views\Home\Index.cshtml:16
or this error
ExecuteReader requires an open and available Connection. The connection's current state is open.
at the same line foreach(var d in m.Details)
this error does go away after a while if I stop hitting the site with parallel requests
with following stack
System.Data.SqlClient.SqlConnection.GetOpenConnection(String method) +5316460
System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +7
System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +155
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +82
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +134
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41
System.Data.Common.DbCommand.ExecuteReader() +12
System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +1306
System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +118
System.Data.Linq.SqlClient.CompiledQuery.Execute(IProvider provider, Object[] arguments) +99
System.Data.Linq.DeferredSourceFactory`1.ExecuteKeyQuery(Object[] keyValues) +402
System.Data.Linq.DeferredSourceFactory`1.Execute(Object instance) +888
System.Data.Linq.DeferredSource.GetEnumerator() +51
System.Data.Linq.EntitySet`1.Load() +107
System.Data.Linq.EntitySet`1.GetEnumerator() +13
System.Data.Linq.EntitySet`1.System.Collections.IEnumerable.GetEnumerator() +4
ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Users\prc0092\Documents\Visual Studio 2012\Projects\LockApp\LockApp\Views\Home\Index.cshtml:16
Different things I tried
Double locking
Doesn't help
private static object ThisLock = new object();
public ActionResult Index()
{
if (HttpRuntime.Cache["c"] == null)
{
lock (ThisLock)
{
if (HttpRuntime.Cache["c"] == null)
{
Loading child data upfront
Works, but requires constant maintenance as not all children should be loaded upfront, plus see next note
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Master>(b => b.Details);
db.LoadOptions = dlo;
Locking the master object while trying to access its children
Again, requires maintenance as all initial places where child is accessed need to be found - we are struggling with this as there are different entry paths into the site
#foreach(var m in ViewBag.Data){
#m.Id<nbsp></nbsp>
lock (m){
foreach(var d in m.Details){
#d.Id<nbsp></nbsp>
}
}
<br />
}
Switching to entity framework
This seems to still have (sometimes - much better than linq-sql) the "open connection" issue at certain number of parallel requests (50+ on core i7) - it does go away after a while as I mentioned and I haven't seen data corruption yet.
We may end up switching to EF completely as this seems to be the only viable path - assuming data corruption doesn't show up - that is to be tested on my actual project.
I am not optimistic though, as EF data context is not thread safe either, and I think the EF data objects carry their context with them. This is probably the only question that I don't have answer to yet.
Theories on why it's broken
It looks like storing LINQ-SQL object in http cache carries the data context with it. When this context is later used by multiple threads to access children, there is some type of concurrency issue that manifests itself in either temporary connectivity issue or complete data corruption of the child object. As there's no way to disconnect/reconnect the context from the LINQ object, it looks like the only suggestion is not to cache LINQ objects that need lazy-loading of their children - a substantial number of google searches I did does not seem to give you that advice, in fact sometimes it's opposite.
I have uploaded the complete project (for Visual Studio 2012 and SQL Server 2012)
https://docs.google.com/file/d/0B8CQRA9dD8POb3U5RGtCV3BMeU0/edit?usp=sharing
and a simple JMeter script that will hit your local machine with parallel requests:
https://docs.google.com/file/d/0B8CQRA9dD8POd1VYdGRDMEFQbEU/edit?usp=sharing
to test, start the site and run the test - then touch the web.config on the site
LockApp.Models.DBDataContext db = new Models.DBDataContext();
var master = db.Masters.ToList();
You should have a call to db.ObjectTrackingEnabled = false in between these two calls. Otherwise all of the objects will be tracked by the datacontext so that changes can be written back into the database. Since you're caching these objects to be read by multiple threads, you do not want this. (It's also more expensive even in single-threaded cases to track objects you won't change, so worth doing in other places).
Also, use LoadWith to eagerly load any properties you might want to access of these cached entities, so they are all loaded on the initial caching thread, rather than with (potentially mulitple) threads that try to access them.
I have an asp.net application in which I am receiving the following error message: -
Exception: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
Stack Trace:
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod method, Boolean disposeInstance, Object& instance)
at System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments)
at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback)
at System.Web.UI.WebControls.DataBoundControl.PerformSelect()
at System.Web.UI.WebControls.BaseDataBoundControl.DataBind()
at System.Web.UI.WebControls.FormView.DataBind()
at System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound()
at System.Web.UI.WebControls.FormView.EnsureDataBound()
at System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls()
at System.Web.UI.Control.EnsureChildControls()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
In an effort to debug the error I have turned the EnablePartialRendering setting to false but this didn't help and the error was displayed in exactly the same way.
The only clue I have is that in the Output window for Debug I am seeing this message: -
'A first chance exception of type 'System.InvalidCastException' occurred in App_Code.iqmc5gba.dll'
Whilst this indicates that the error is occurring within the code held in the App_Code folder I'm actually none the wiser as there are 211 files that would appear to be contributing to the content of the dll as they are all named App_Code.iqmc5gba.nnn.cs where nnn is a number between 0 and 210
At the time ther error occurs the code is getting the data to display a record in a formview. The error only occurs on one record in the database that I can see at the moment.
Is anyone aware of any techniques that I can use to try and identify the line of code that is being executed at the point the invalidcastexception is encountered?
This typically happens when reading data (using a datareader, for example) and certain column comes back null when you actually expect it to have at least some value. Consider this code:
int age = (int)reader["age"]; //will throw ClassCastException if null
If for some reason the result set contains a null value on the age column, the value held by reader["age"] will not be an integer but rather a DBNull.Value which is a different type; hence the ClassCastException.
If you don't have access to the source code, your best bet is to make compare a good record with the bad one and make sure that corresponding columns on both records have values.
I was having the same issues. Not sure if you have fixed your problem but Icarus is on the correct path. What I found was that in some cases you need to set the security question for an account to be created. I solved the problem by opening the ASP.Net Config under the Project Tab in VS2012. Click on the Provider Tab and Select a Provider for site management (Single in my case). Once that is active and you test the connection, when you go back to add a new user, there will be an option to enter a security question and answer. This seems to fix the problem.
I am stuck into a problem here and need a hint from someone.
I am using my own SQL Server database for managing users and roles (as opposed to aspnet DB). It was working fine until I added some custom fields to the aspnet_membership table. After doing so, I cannot create a new user through the asp.net web administration tool. The following exception is thrown:
An error was encountered. Please return to the previous page and try again.
The following message may help in diagnosing the problem: Exception has been thrown by the target of an invocation. at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Web.Administration.WebAdminMembershipProvider.CallWebAdminMembershipProviderHelperMethodOutParams(String methodName, Object[] parameters, Type[] paramTypes) at System.Web.Administration.WebAdminMembershipProvider.CreateUser(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, Object providerUserKey, MembershipCreateStatus& status) at System.Web.UI.WebControls.CreateUserWizard.AttemptCreateUser() at System.Web.UI.WebControls.CreateUserWizard.OnNextButtonClick(WizardNavigationEventArgs e) at System.Web.UI.WebControls.Wizard.OnBubbleEvent(Object source, EventArgs e) at System.Web.UI.WebControls.CreateUserWizard.OnBubbleEvent(Object source, EventArgs e) at System.Web.UI.WebControls.Wizard.WizardChildTable.OnBubbleEvent(Object source, EventArgs args) at System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) at System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs 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.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
This occurs only at the time of user creation. Everything else is working fine. I have already tried running the aspnet_regsql utility again. Any other suggestions? Any help will be most appreciated.
--
Ali
At a guess, are any of the fields you have added defined as Not NULL and have no defaults?
If so, make sure you populate them in the code that addes a user.
Are the extra columns allowed to hold null values? Have you defined suitable default values if they aren't?
Did you update the Stored Procedures that write to the membership tables? If so, then you'll need to write a custom membership provider to populate them - what sort of details are they?
It would probably be better to store these values against a Profile for the user - unless they are explicitly to do with their membership, in which a custom provider is the way to go.
Edit to respond to Ali's comments
In that instance (marking an account as deleted/inactive) then yes, it probably makes sense to store that against the membership table - they are to do with the users membership of the site.
However - the main issue I can see with your approach is that if you're using the default Login controls, the user can still log in initially, and then you'd need to be checking the value of the Deleted field in either the LoggingIn (before Authentication) or LoggedIn (after) event handlers - you might be able to get away with modifying the built in IsApproved property to handle this by default.
Thanks Zhaph and Oded. The NULL values were problem.
But Zhaph pointed out towards another issue I would like to know more. The additional details are like isDeleted, where I just mark isDeleted as true without actually having to delete the user and then some relevant details for audit like deletedByUser, dateDeleted etc. (and some application specific).
I did not update the stored procedures that write to the membership tables. Instead, I have some additional SPs which fill in the extra details as soon as the user is created. Is that(storing field in membership table and writing new procedures) a correct way to approach?