将 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"
中将下一行添加到我的会员提供商的行中。
我不知道为什么它不起作用。有人有什么想法吗?
每当我需要执行诸如从此类电子表格导入数据之类的操作时,只需在我的解决方案中编写导入程序控制台应用即可。我还使用 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
}
}