将 excel .xls数据库解析为 sql 服务器数据库

本文关键字:数据库 sql 服务器 excel xls | 更新日期: 2023-09-27 18:33:14

我有 asp.net mvc4 项目,其中有学生数据库,也有.xls格式的旧数据库,我需要将所有值从旧数据库迁移到新的 sql Server 数据库。在我的 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;
    }

操作结果开机自检

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"。在此之后,它告诉我我的无效密码。此外,我在web.config requiresQuestionAndAnswer="false"中将下一行添加到我的会员提供商的行中。

我不知道为什么它不起作用。有人有什么想法吗?

将 excel .xls数据库解析为 sql 服务器数据库

每当我需要执行诸如从此类电子表格导入数据之类的操作时,只需在我的解决方案中编写导入程序控制台应用即可。我还使用 LINQ 到 CSV,您可以从 Nuget 获得它,这是一个非常有用的工具。

它允许您将电子表格中的数据读入到相关的类对象中,一旦您验证了每个对象,您就可以使用数据层在数据库中创建新对象。

由于xls(不是xlsx(文件基本上是文本文件,其中的内容通常由制表符(或某些特定的charchters(分隔,a better approach读取文件中的所有行并将它们存储在列表中。

然后,您可以在将每个元素插入数据库时对其进行拆分。这可以使用 foreach 循环轻松完成,例如:

foreach (var i in xlsList) {
    String s [] = i.Split(''t').ToArray();  // refer to your file 
    for (int j = 0; j < s.lenght; j++) {
       Your SQL statement in here
    }
}