C#值不能为空。参数名称:用户
在我的C#应用程序中,我使用了两个连接字符串(应用程序、用户)。要更改这些连接字符串,我使用:C#值不能为空。参数名称:用户,c#,connection-string,C#,Connection String,在我的C#应用程序中,我使用了两个连接字符串(应用程序、用户)。要更改这些连接字符串,我使用: private static void SetProviderConnectionString(string connectionString) { var connectionStringFieldM = Membership.Provider.GetType().GetField("_sqlConnectionString",
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
的变量。这是问题的根源吗?但为什么只在生产服务器上?
编辑
奇怪的是,当我从VisualStudio本地运行我的应用程序时,它就像一个魔咒。但是,当我在生产服务器上运行的应用程序中添加用户时,当我尝试添加第二个用户时,它失败,我收到以下错误:
值不能为null。参数名称:用户
如果我尝试登录到我的应用程序之后,它失败了。我必须从iis重新启动我的网站才能再次登录。
有什么想法吗?我在你的代码中找不到这个错误,但是如果你说这个错误只发生在服务器上,并且你确定你的文件在服务器和你的本地机器之间同步,那么这个错误可能就在你的web.config中。看一看我在您的代码中找不到错误,但是如果您说此错误只发生在服务器中,并且您确定您的文件在服务器和本地计算机之间同步,那么错误可能在您的web.config中。看看“//…添加用户的代码”这是什么?共享这些行我在代码中看不到任何具有名为“user”的参数的方法。您的错误不可能在那里。通过填充aspnet表(aspnet_Profile、aspnet_Users、aspnet_UsersInRoles等…以及用户数据库中的我的用户表)来创建用户,顺便说一句,您是否认真地在私有字段中反映以更改对象的行为?恶心@Sefe请查看我编辑的帖子。关于“user”变量的信息“/…添加用户的代码”这是什么?共享这些行我在代码中看不到任何具有名为“user”的参数的方法。您的错误不可能在那里。通过填充aspnet表(aspnet_Profile、aspnet_Users、aspnet_UsersInRoles等…以及用户数据库中的我的用户表)来创建用户,顺便说一句,您是否认真地在私有字段中反映以更改对象的行为?恶心@Sefe请查看我编辑的帖子。有关“用户”变量的信息