2016-11-29 147 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方法是你需要的。