我正在使用ASP.NET DynamicData v4.5来允许管理员插入/更新数据库中的记录。
我的要求是, - 允许管理员从EXCEL文件导入表的记录。 该表的源也可以在excel文件中获得。所以我希望管理员从文件中导入数据。
我有什么办法可以在DynamicData中实现这个目标吗?
答案 0 :(得分:2)
是的,你可以做到,我做过很多次。 动态数据中没有内置功能,但这不是问题,因为它很容易实现。
您使用ASP.NET动态数据(就像我一样)这一事实对此任务并不重要。您可能知道,您可以在动态数据项目中创建常规ASP.NET表单。您还可以使用名为 / DynamicData / CustomPages 的文件夹来自定义动态数据页面。我建议创建一个名为ImportingTool.aspx的新常规ASP.NET表单,您的用户可以将电子表格导入数据库。导入后,他们可以使用其他动态数据页来编辑数据。
以下是您的需求:
1-您需要用户上传文件 asp:fileupload 或 ajaxToolkit:AjaxFileUpload
2-您需要打开该文件,它将如下所示:
public void Import(FileUpload fileUpload)
{
if (fileUpload.HasFile)
{
string FileName = Path.GetFileName(fileUpload.PostedFile.FileName);
string Extension = Path.GetExtension(fileUpload.PostedFile.FileName);
string FilePath = HttpRuntime.AppDomainAppPath + "/Uploaded/" + FileName;
fileUpload.SaveAs(FilePath);
Import(FilePath, Extension);
}
}
3-您需要在数据库中导入该文件,它将如下所示:
public Boolean Import(string FilePath, string Extension)
{
if (String.IsNullOrEmpty(FilePath) || String.IsNullOrEmpty(Extension))
{
return false;
}
string conStr;
string conStrNoHDR;
GetConnectionString(FilePath, Extension, out conStr, out conStrNoHDR);
OleDbConnection connection = new OleDbConnection(conStr);
OleDbConnection connectionNoHDR = new OleDbConnection(conStrNoHDR);
// depending on file extension, you might want to use connectionNoHDR
Import(connection);
connection.Close();
connectionNoHDR.Close();
}
private static void GetConnectionString(string FilePath, string Extension, out string conStr, out string conStrNoHDR)
{
conStr = "";
conStrNoHDR = "";
switch (Extension)
{
case ".xls": //Excel 97-03
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR=YES\"";
conStrNoHDR = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR=NO\"";
break;
case ".xlsx": //Excel 07
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=Excel 12.0 ";
conStrNoHDR = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 12.0;HDR=NO\"";
break;
case ".csv":
conStr = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + Path.GetDirectoryName(FilePath) + ";Extended Properties=\"Text;FMT=Delimited;HDR=NO\"";
break;
}
}
public static void Import(OleDbConnection connection)
{
String query = "SELECT * From [Report-LANG_VOCALLS$]";
DataTable dt = ImportUtils.GetData(connection, query);
string table = "Dialer";
string conn = ConfigurationManager.ConnectionStrings["Telecom"].ConnectionString;
SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
bulkCopy.ColumnMappings.Add("Phone", "Phone");
bulkCopy.ColumnMappings.Add("portfolio", "Portfolio_eng");
bulkCopy.ColumnMappings.Add("dept", "Department_eng");
ImportUtils.BulkCopy(dt, table, bulkCopy);
}
public static DataTable GetData(OleDbConnection connection, String query)
{
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbCommand cmdExcel = new OleDbCommand();
cmdExcel.CommandText = query;
cmdExcel.Connection = connection;
connection.Open();
adapter.SelectCommand = cmdExcel;
adapter.Fill(dt);
Debug.WriteLine(dt.Rows.Count);
connection.Close();
return dt;
}