2016-11-29 61 views
1
public DataTable InsertToIncludeandReturnErrorTable(DataTable MappingTable, DataTable InsertTable, string TableName) 
{ 
    //split data and insert data to datatable and validation 
    var CS = Serenity.Data.SqlConnections.GetConnectionString("Northwind"); 
    String MyConString = CS.ConnectionString; 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = MyConString; 
    DataTable returnDataTable = InsertTable.Clone(); 
    con.Open(); 
    foreach (DataRow InsertRow in InsertTable.Rows) 
    { 
     try 
     { 
      string InsertDBFileld = ""; 
      string DatarowField = ""; 

      foreach (DataRow row in MappingTable.Rows) 
      { 
       if (InsertDBFileld == "") 
        InsertDBFileld = InsertDBFileld + row["TableColumn"].ToString().Replace("\r\n", ""); 
       else 
        InsertDBFileld = InsertDBFileld + "," + row["TableColumn"].ToString().Replace("\r\n", ""); 

       if (DatarowField == "") 
        DatarowField = "'" + DatarowField + InsertRow[row["ExcelColumn"].ToString().Replace("\r\n", "")].ToString() + "'"; 
       else 
        DatarowField = DatarowField + ",'" + InsertRow[row["ExcelColumn"].ToString().Replace("\r\n", "")].ToString() + "'"; 
      } 
      InsertDBFileld = InsertDBFileld + @",CreatedBy,CreatedDate,ModifiedBy,ModifiedDate"; 
      DatarowField = DatarowField + ",'" + User.Identity.Name + "'," + "'" + DateTime.Now + "'," + "'" + User.Identity.Name + "'," + "'" + DateTime.Now + "'"; 

      using (SqlCommand cmd = new SqlCommand(@"INSERT INTO dbo." + TableName + @"(
                " + InsertDBFileld + @" 
                ) VALUES(" + DatarowField + ")", con)) 
      { 

       cmd.ExecuteNonQuery(); 

      } 


     } 
     catch (Exception ex) 
     { 
      DataRow returnRow = InsertRow; 
      returnDataTable.Rows.Add(InsertRow.ItemArray); 
     } 
    } 
    if (con.State == System.Data.ConnectionState.Open) 
     con.Close(); 
    return returnDataTable; 

} 
[HttpGet] 
public FileContentResult DownLoadFile(string destFilePath) 
{ 
    //Generate Excel file with data 
    destFilePath = destFilePath.Replace("%5c", "\\").Replace("%3a", ":"); 
    byte[] fileBytes = System.IO.File.ReadAllBytes(destFilePath); 
    string fileName = "ErrorList.xlsx"; 
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 

} 

原始碼可以檢測列數據長度並輸出錯誤的數據行。c#獲取列的數據類型和大小

如何獲取列的數據類型和大小?

如果我上傳一個excel超過了數據長度,輸出一個excel文件並在錯誤的數據單元中填寫紅色。

+0

使用SQL自帶的SQL Server Management Studio並使用資源管理器來查找數據庫和表。然後看看列。 – jdweng

回答

1

您可以從您的DataTable的列檢查數據的類型和最大長度:

Type columnType = InsertTable.Columns["TableColumn"].DataType; 
int maxLength = InsertTable.Columns["TableColumn"].MaxLength; 

如果您的表不包含架構信息(我懷疑),你可以從數據庫中首先獲取架構與SqlDataAdapterFillSchema方法是你需要的。