2016-07-19 7 views
1

Ich versuche, meine Excel-Blatt-Daten in meine Rasteransicht in ASP.NET-Site zu exportieren. Die Rasteransicht füllt die Daten, aber die Excel-Tabellenspalte Daten EMP_CODE fehlt.Spalte Daten fehlen, wenn ich Daten von .csv Excel zu Grid-Ansicht in Asp.net importieren

Excel-Daten:

enter image description here

Rendered Grid:

enter image description here `

-Code zum Bestücken asp:GridView:

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    if (FileUpload1.FileName != "") 
    { 
     try 
     { 
      FileUpload1.SaveAs(Server.MapPath("~/Appraisal/" + FileUpload1.FileName)); 
      CvsPath = null; 
      string constr = null; 
      //constr = System.Configuration.ConfigurationManager.ConnectionStrings("connStr").ToString; 
      constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      SqlConnection dwConn = new SqlConnection(constr); 
      //con.Open() 
      CvsPath = Server.MapPath("~/Appraisal/" + FileUpload1.FileName); 
      //Response.Write(CvsPath) 
      FileUpload1.Dispose(); 
      // Dim constr As String 
      System.Data.OleDb.OleDbConnection csvConn = new System.Data.OleDb.OleDbConnection(); 
      //constr = System.Configuration.ConfigurationManager.ConnectionStrings("connStr").ToString 
      //csvConn.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;;Data Source=" + CvsPath + ";Extended Properties=\"Excel 8.0;HDR=YES;\""); 
      csvConn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + CvsPath + ";Extended Properties=Excel 12.0;Persist Security Info=False"; 
      // 
      csvConn.Open(); 
      System.Data.OleDb.OleDbCommand csvCmd = new System.Data.OleDb.OleDbCommand(); 
      csvCmd.CommandText = ("Select * From [Sheet1$]"); 
      //csv file being in localDir 
      //assign the cmd to a connection 
      csvCmd.Connection = csvConn; 
      //create csv reader 
      System.Data.OleDb.OleDbDataReader csvRdr = null; 
      //insert the csv contents into a reader 
      csvRdr = csvCmd.ExecuteReader(); 
      //open sql connection 
      dwConn.Open(); 
      //create sqlbulk copy to insert the csv reader into db table 
      SqlBulkCopy sqlBulk = new SqlBulkCopy(dwConn); 
      sqlBulk.DestinationTableName = "[dbo].[MstAppointmentRegister]"; 
      sqlBulk.WriteToServer(csvRdr); 
      //close csv connection 
      csvRdr.Close(); 
      csvConn.Close(); 
      //close sql connection 
      dwConn.Close(); 
      lblError.Visible = true; 
      lblError.Text = "File Uploaded Successfully"; 

      if (lblError.Text == "File Uploaded Successfully") 
      { 
       FillGridFromExcelSheet(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Response.Write("<br />" + ex.Message); 
     } 
     //Response.Redirect("upload_ClosingPrice.aspx?act=1"); 
    } 
    else 
    { 
     lblError.Visible = true; 
     lblError.Text = "Please Select File"; 
    } 
} 

GridView und SqlDataSource Markup:

<asp:GridView ID="ExcelGridView" runat="server" 
     Cssclass="table table-striped" 
     Visible="False" 
     AutoGenerateColumns="False" 
     DataKeyNames="SRID" 
     OnPageIndexChanging="GridView1_PageIndexChanging" 
     OnRowCancelingEdit="GridView1_RowCancelingEdit" 
     OnRowDeleting="GridView1_RowDeleting" 
     OnRowEditing="GridView1_RowEditing" 
     OnRowUpdating="GridView1_RowUpdating"> 
     <Columns> 
      <asp:CommandField ShowEditButton="true" HeaderText="Modify" /> 
      <asp:CommandField ShowDeleteButton="true" HeaderText="Remove" /> 
      <asp:BoundField DataField="SRID" HeaderText="SRID" /> 
      <asp:BoundField DataField="Emp_Code" HeaderText="Emp_Code" /> 
      <asp:BoundField DataField="Letter" HeaderText="Letter" /> 
      <asp:BoundField DataField="Letter" HeaderText="Letter" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" /> 
      <asp:BoundField DataField="First_Name" HeaderText="First_Name" /> 
      <asp:BoundField DataField="Address_Line1" HeaderText="Address_Line1" /> 
      <asp:BoundField DataField="Address_Line2" HeaderText="Address_Line2" /> 
      <asp:BoundField DataField="Address_Line3" HeaderText="Address_Line3" /> 
      <asp:BoundField DataField="DOJ" HeaderText="DOJ" /> 
      <asp:BoundField DataField="Designation" HeaderText="Designation" /> 
      <asp:BoundField DataField="CTC" HeaderText="CTC" /> 
      <asp:BoundField DataField="CTC_in_Words" HeaderText="CTC in Words" /> 
     </Columns> 
    </asp:GridView> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="Data Source=103.21.58.193;Initial Catalog=jig_match_db;User ID=jig_match_db;[email protected]" 
     DeleteCommand="DELETE FROM [MstAppointmentRegister] WHERE [SRID] = @SRID" 
     SelectCommand="SELECT * FROM [MstAppointmentRegister]" 
     UpdateCommand="UPDATE [MstAppointmentRegister] SET [Name] = @Name, [First_Name] = @First_Name, [Address_Line_1] = @Address_Line_1, [Address_Line_2] = @Address_Line_2, [Address_Line_3] = @Address_Line_3, [DOJ] = @DOJ, [Designation] = @Designation, [CTC] = @CTC, [CTC_in_Words] = @CTC_in_Word WHERE [SRID] = @SRID" 
     InsertCommand="INSERT INTO [MstAppointmentRegister] ([Name],[First_Name],[Address_Line_1],[Address_Line_2],[Address_Line_3],[DOJ],[Designation],[CTC],[CTC_in_Words]) VALUES (@Name,@First_Name,@Address_Line_1,@Address_Line_2,@Address_Line_3,@DOJ,@Designation,@CTC,@CTC_in_Words)"> 
     <DeleteParameters> 
      <asp:Parameter Name="SRID" Type="Int64" /> 
     </DeleteParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="Emp_Code" Type="String" /> 
      <asp:Parameter Name="Letter" Type="String" /> 
      <asp:Parameter Name="Name" Type="String" /> 
      <asp:Parameter Name="First_Name" Type="String" /> 
      <asp:Parameter Name="Address_Line1" Type="String" /> 
      <asp:Parameter Name="Address_Line2" Type="String" /> 
      <asp:Parameter Name="Address_Line3" Type="String" /> 
      <asp:Parameter Name="DOJ" Type="String" /> 
      <asp:Parameter Name="Designation" Type="String" /> 
      <asp:Parameter Name="CTC" Type="String" /> 
      <asp:Parameter Name="CTC_in_Words" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Datenbankschema für die Tabelle MstAppointmentRegister:

CREATE TABLE [dbo].[MstAppointmentRegister](
    [SRID] [bigint] IDENTITY(1,1) NOT NULL, 
    [EMP_Code] [varchar](150) NULL, 
    [Letter][varchar](200) NULL, 
    [Name] [varchar](150) NULL, 
    [First_Name] [varchar](100) NULL, 
    [Address_Line_1] [varchar](100) NULL, 
    [Address_Line_2] [varchar](150) NULL, 
    [Address_Line_3] [varchar](100) NULL, 
    [DOJ] [varchar](100) NULL, 
    [Designation] [varchar](150) NULL, 
    [CTC] [varchar](150) NULL, 
    [CTC_in_Words] [varchar](150) NULL, 

CONSTRAINT [PK_mstappointmentregister] PRIMARY KEY CLUSTERED 
(
    [SRID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Bitte helfen Sie mir?

+0

bitte die Struktur der Datenbanktabelle zeigen 'MstAppointmentRegister' auch chec k if'Emp_Code' wird in die Datenbank eingefügt. – naveen

+0

Emp-Code wird nicht eingefügt :( – Jatin

+0

so ist das Problem mit BulkInsert. Überprüfen Sie, ob es eine Emp_Code Spalte in Ihrer Datenbank gibt. Was ist der Datentyp?Überprüfen Sie auch auf Rechtschreibfehler für den Spaltennamen in der Tabelle und Excel – naveen

Antwort

0

In SqlBulkCopy wird bei den Spaltenzuordnungen die Groß-/Kleinschreibung beachtet, unabhängig von der Einstellung der Groß-/Kleinschreibung im Ziel-DB.

Wie MSDN Noten,

Column Zuordnungen definieren die Zuordnung zwischen Datenquelle und dem Ziel Tabelle.

Wenn Zuordnungen nicht definiert sind, dh die Auflistung ColumnMappings leer ist, werden die Spalten implizit basierend auf der Position zugeordnet. Damit dies funktioniert, müssen Quell- und Zielschemas übereinstimmen. Wenn sie nicht sind, wird eine InvalidOperationException ausgelöst.

Wenn die ColumnMappings-Auflistung nicht leer ist, muss nicht jede in vorhandene Spalte angegeben werden. Diejenigen, die nicht von der Auflistung zugeordnet sind, werden ignoriert.

In Ihrem Fall der Excel gibt die Spalte Emp_Code und die Tabelle in der Datenbank hat die Spalte EMP_Code. Das Mapping schlägt fehl als Emp_Code != EMP_Code.

MSDN-Link: SqlBulkCopyColumnMapping Class