私は asp.net mvc4 プロジェクトを持っています。そこには学生のデータベースがあり、.xls 形式の古いデータベースもあり、すべての値を古いデータベースから新しい 1 つの SQL サーバー データベースに移行する必要があります。私のmvcプロジェクトには、新しい学生を登録するためのメソッドを含むメンバーシップコントローラーがあります。また、.xls テーブルを解析し、Register メソッドを介して新しいデータベースにすべての値を挿入するコンソール アプリケーションを作成しています。
コンソール アプリケーション:
static void Main(string[] args)
{
string con = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MigrateExelSql\Include\TestDb.xlsx; Extended Properties=Excel 12.0;";
MembershipController mc = new MembershipController();
Student student = new Student();
student.Username = null;
student.Password = "password";
student.Email = null;
student.EntryYear = 2014;
student.PassportNumber = 0;
student.IsApproved = true;
student.PasswordFailuresSinceLastSuccess = 0;
student.IsLockedOut = false;
using(OleDbConnection connection = new OleDbConnection(con))
{
connection.Open();
OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);
using(OleDbDataReader dr = command.ExecuteReader())
{
while(dr.Read())
{
string row1Col0 = dr[0].ToString();
Console.WriteLine(row1Col0);
string row1Col1 = dr[1].ToString();
Console.WriteLine(row1Col1);
Console.WriteLine();
student.Username = row1Col0;
student.Email = row1Col1;
try
{
mc.Register(student);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
Console.ReadKey();
}
登録方法
public static MembershipCreateStatus Register(string Username, string Password, string Email, bool IsApproved, string FirstName, string LastName)
{
MembershipCreateStatus CreateStatus;
System.Web.Security.Membership.CreateUser(Username, Password, Email, null, null, IsApproved, null, out CreateStatus);
if (CreateStatus == MembershipCreateStatus.Success)
{
using (UniversityContext Context = new UniversityContext(ConfigurationManager.ConnectionStrings[0].ConnectionString))
{
Student User = Context.Students.FirstOrDefault(Usr => Usr.Username == Username);
User.FirstName = FirstName;
User.LastName = LastName;
Context.SaveChanges();
}
if (IsApproved)
{
FormsAuthentication.SetAuthCookie(Username, false);
}
}
return CreateStatus;
}
アクション結果 POST
public ActionResult Register(Student student)
{
Register(student.Username, student.Password, student.Email, true, student.FirstName, student.LastName);
return RedirectToAction("Index", "Membership");
}
Web アプリケーションから学生を追加しようとするとすべて正常に動作しますが、解析されたデータベースから追加しようとすると、次の行でエラーが発生しました
System.Web.Security.Membership.CreateUser(Username, Password, Email, null, null, IsApproved, null, out CreateStatus);
私のRegister
方法では、invalidAnswer
. null を "123456789" に変更すると、次のエラーが発生し、さらにinvalidQuestion
null から "123456789" に変更されます。そして、この後、私の無効なパスワードを教えてください。また、次の行が my のメンバーシップ プロバイダーの行に追加されますweb.config
requiresQuestionAndAnswer="false"
。
なぜ機能しないのかわかりません。誰にもアイデアはありますか?