Да, ты справишься, я делал это много раз. В Dynamic Data нет встроенной функции для этого, но это не проблема, поскольку ее довольно легко реализовать.
Тот факт, что вы используете динамические данные ASP.NET (как и я), не очень важен для этой задачи. Как вы, наверное, знаете, вы можете создать обычную форму ASP.NET в проекте динамических данных. Вы также можете использовать папку с именем / DynamicData / CustomPages для настройки страницы динамических данных. Я предлагаю создать новую обычную форму ASP.NET под названием ImportingTool.aspx, где ваши пользователи смогут импортировать электронные таблицы в вашу базу данных. После импорта они могут использовать другие страницы динамических данных для редактирования данных.
Вот что вам понадобится:
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;
}
person
JP Tétreault
schedule
16.06.2015