我只想在将所有行详细信息从Excel导入到Sql数据库时直接添加列值。
这是我的代码:
protected void lbut_import_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
if (FileUpload1.HasFile)
{
if (FileUpload1.FileContent.Length > 0)
{
string Foldername;
string Extension = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
string filename = DateTime.Now.ToString("ddMMyyyy_HHmmss");
if (Extension == ".XLS" || Extension == ".XLSX" || Extension == ".xls" || Extension == ".xlsx")
{
Foldername = Server.MapPath("~/Files/");
FileUpload1.PostedFile.SaveAs(Foldername + filename + Extension);
String conStr = "";
switch (Extension)
{
case ".xls": //Excel 97-03
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + Foldername + "//" + filename + Extension + ";" +
"Extended Properties=Excel 8.0;";
break;
case ".xlsx": //Excel 07
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + Foldername + "//" + filename + Extension + ";" +
"Extended Properties=Excel 8.0;";
break;
}
OleDbConnection excelConnection = new OleDbConnection(conStr);
OleDbCommand cmd = new OleDbCommand("Select * from [Sheet1$]", excelConnection);
excelConnection.Open();
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["CRMConnectionString"].ToString());
//Give your Destination table name
using (DataClassesDataContext db = new DataClassesDataContext())
{
sqlBulk.DestinationTableName = "tbl_Party_master";
sqlBulk.ColumnMappings.Add("Name",int.Parse(dReader[txt_col.Text.Trim()].ToString()));
sqlBulk.ColumnMappings.Add("type_id", int.Parse(dReader[txt_col1.Text.Trim()].ToString()));
if (!string.IsNullOrEmpty(txt_col2.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Ownername", int.Parse(dReader[txt_col2.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col3.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Ownermob", int.Parse(dReader[txt_col3.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col4.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Room", int.Parse(dReader[txt_col4.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col5.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Road", int.Parse(dReader[txt_col5.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col6.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Area", int.Parse(dReader[txt_col6.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col7.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("City", int.Parse(dReader[txt_col7.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col8.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Mobile", int.Parse(dReader[txt_col8.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col9.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Email", int.Parse(dReader[txt_col9.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col10.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("ContactPerson", int.Parse(dReader[txt_col10.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col11.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("ContactPersonmob", int.Parse(dReader[txt_col11.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col12.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("UserOFC", int.Parse(dReader[txt_col12.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col13.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("UserVAT", int.Parse(dReader[txt_col13.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col14.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("UserINV", int.Parse(dReader[txt_col14.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col15.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("UserNone", int.Parse(dReader[txt_col15.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col16.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("state_id", int.Parse(dReader[txt_col16.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col17.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("country_id", int.Parse(dReader[txt_col17.Text.Trim()].ToString()));
}
if (!string.IsNullOrEmpty(txt_col18.Text.Trim()))
{
sqlBulk.ColumnMappings.Add("Remark", int.Parse(dReader[txt_col18.Text.Trim()].ToString()));
}
sqlBulk.ColumnMappings.Add("Register_Date", "Register_Date");
sqlBulk.ColumnMappings.Add("User_id","User_id");
sqlBulk.WriteToServer(dReader);
excelConnection.Close();
}
}
}
ibtnimexls_ModalPopupExtender.Show();
}
}
}
我发现了这样的错误:
1
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.IndexOutOfRangeException: 1
Source Error:
Line 3015: {
Line 3016: sqlBulk.DestinationTableName = "tbl_Party_master";
Line 3017: sqlBulk.ColumnMappings.Add("Name",int.Parse(dReader[txt_col.Text.Trim()].ToString()));
Line 3018: sqlBulk.ColumnMappings.Add("type_id", int.Parse(dReader[txt_col1.Text.Trim()].ToString()));
Line 3019: if (!string.IsNullOrEmpty(txt_col2.Text.Trim()))
Source File: f:\CRM\Staff\Raise_Ticket.aspx.cs Line: 3017
Stack Trace:
[IndexOutOfRangeException: 1]
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +5002922
System.Data.OleDb.OleDbDataReader.GetOrdinal(String name) +68
System.Data.OleDb.OleDbDataReader.get_Item(String name) +15
Staff_Raise_Ticket.lbut_import_Click(Object sender, EventArgs e) in f:\CRM\Staff\Raise_Ticket.aspx.cs:3017
System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +118
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +113
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +9
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +176
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
我不知道我怎么错了.........................
答案 0 :(得分:0)
SqlBulkCopyColumnMapping
类仅将源列映射到目标列。不将值发送到目标列。 (请注意,您甚至尝试将源列映射到目标值,这很难想象。)
您必须确保dReader
在其查询中具有硬编码的必需值。