如何在asp.net 4.0中直接使用sql bulk添加列值

时间:2014-06-04 09:26:07

标签: c#-4.0 asp.net-3.5

我只想在将所有行详细信息从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

我不知道我怎么错了.........................

1 个答案:

答案 0 :(得分:0)

SqlBulkCopyColumnMapping类仅将源列映射到目标列。不将发送到目标列。 (请注意,您甚至尝试将源列映射到目标值,这很难想象。)

您必须确保dReader在其查询中具有硬编码的必需值。