C# 值不能为空。参数名称:用户

C# Value cannot be null. Parameter name: user

在我的 C# 应用程序中,我使用了 2 个连接字符串(application_cs、users_cs)。要更改这些连接字符串,我使用:

private static void SetProviderConnectionString(string connectionString)
        {
            var connectionStringFieldM =
            Membership.Provider.GetType().GetField("_sqlConnectionString",
                        BindingFlags.Instance | BindingFlags.NonPublic);
            var connectionStringFieldR = Roles.Provider.GetType().GetField("_sqlConnectionString",
                       BindingFlags.Instance | BindingFlags.NonPublic);
            var connectionStringFieldP = ProfileManager.Provider.GetType().GetField("_sqlConnectionString",
                    BindingFlags.Instance | BindingFlags.NonPublic);

            connectionStringFieldM.SetValue(Membership.Provider, connectionString);
            connectionStringFieldR.SetValue(Roles.Provider, connectionString);
            connectionStringFieldP.SetValue(ProfileManager.Provider, connectionString);
        }

        public static void SetProviderUsers()
        {
            SetProviderConnectionString(ConfigurationManager.ConnectionStrings["users_cs"].ConnectionString);
        }

        public static void SetProviderApp()
        {
            SetProviderConnectionString(ConfigurationManager.ConnectionStrings["application_cs"].ConnectionString);
        }

所以在我的代码中,每当我想添加一个用户时,我都会这样做:

public int CreateUser(int stid, int cid, int usrId, string email, string tel, string mob, string username, 
            bool create, bool prime)
        {
            int result = 0; 
            Guid userid = new Guid();
            DALUsers.UserDBDataContext dc = new DALUsers.UserDBDataContext();
            DAL.AppDataContext d = new DAL.AppDataContext();

            BLL.Security.SetProviderUsers();

            if (create) //create the user first
            {

                string question = "1";
                string answer = "1";
                bool isAproved = true;

                string password = System.Web.Security.Membership.GeneratePassword(8, 2);


                MembershipCreateStatus cs = new MembershipCreateStatus();

                MembershipUser newUser = Membership.CreateUser(username, password, email, question, answer, isAproved, out cs);
                Membership.UpdateUser(newUser);
                Roles.AddUserToRole(username, "User_x");
                if (cs == MembershipCreateStatus.Success)
                {
                    result = 1;
                }
                else
                    X.MessageBox.Info("Error", "Cannot create user due to :" + cs.ToString(), UI.Danger).Show();
            }

            //at this point we have the user created either way. 

            // return userid;
            var id = (from i in dc.aspnet_Users where i.UserName.CompareTo(username) == 0 select i.UserId);
            if (id.Count() == 1)
            {
                userid = id.First();
                bool contin = true;
                var fulname = (from i in dc.Clients where i.id == usrId select i).First();

                if (String.IsNullOrEmpty(fulname.Mobile)) fulname.Mobile = mob; 

                fulname.Email = email;
                fulname.ModifiedBy = HttpContext.Current.User.Identity.Name;
                fulname.ModifiedDate = DateTime.Now;

                dc.SubmitChanges();


                DateTime dt = DateTime.Now;

                DALUsers.CIUser usr = new DALUsers.CIUser();

                var existing = (from i in dc.CIUsers where i.UserName.CompareTo(username) == 0 && i.cid == cid select i);
                if (existing.Count() > 0)
                {
                    X.MessageBox.Info("Warning", "UserName already exists . Please try another!", UI.Warning).Show();
                    contin = false;
                }
                else
                {


                    dc.CIUsers.InsertOnSubmit(usr);
                    dc.SubmitChanges();
                }

                if (contin)
                {
                    DALUsers.CIUser usrNew = new DALUsers.CIUser();

                    var approved = (from k in dc.aspnet_Memberships //if user is not approved 
                                    where k.UserId == userid
                                    select k).FirstOrDefault();

                    if (approved.IsApproved == false)
                    {
                        approved.IsApproved = true;
                    }

                    ProfileBase profile = ProfileBase.Create(username);
                    profile.SetPropertyValue("Mobile", mob);
                    profile.SetPropertyValue("Email", email);
                    profile.Save();

                    usrNew.UserId = usrId;
                    usrNew.cid = cid;
                    usrNew.FullName = fulname.LastName + " " + fulname.FirstName;
                    usrNew.Role = "User_x";
                    usrNew.SignRights = prime;
                    usrNew.IsPrime = prime;
                    usrNew.stid = stid;
                    usrNew.UserName = username;
                    usrNew.UserId = userid;
                    usrNew.CreatedDate = DateTime.Now;
                    usrNew.CreatedBy = HttpContext.Current.User.Identity.Name;
                    dc.CIUsers.InsertOnSubmit(usrNew);
                    dc.SubmitChanges();

                    result = 1;

                    X.MessageBox.Info("Success", "The user has been successfully added", UI.Success).Show();
                }
            }
            else
                X.MessageBox.Info("Error", "Could not find the user", UI.Danger).Show();
            BLL.Security.SetProviderApp();
            return result;
        }

编辑 我刚看到我的代码中有这一行:

DALUsers.aspnet_User user = new DALUsers.aspnet_User();

但是变量 user 没有在代码的其他任何地方使用。可能它一直留在那里......它是我代码中唯一名为 user 的变量。这是导致问题的原因吗?但是为什么只在生产服务器上呢? 编辑

奇怪的是,当我从 visual studio 本地 运行 我的应用程序时,它就像一个魅力。但是,当我在生产服务器上的应用程序 运行ning 中添加用户时,当我尝试添加 second 用户时,它失败了,我收到此错误:

Value cannot be null. Parameter name: user

如果之后我尝试登录我的应用程序,它会失败。我必须从 iis 重新启动我的网站才能再次登录。 有什么想法吗?

好吧,我在你的代码中找不到错误,但如果你说这个错误只发生在服务器中,并且你确定你的文件在服务器和本地机器之间同步,那么错误可能出在你的 web.config。看看