Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कॉलिड 6 के लिए बीसीपी क्लाइंट से एक अमान्य कॉलम लंबाई प्राप्त हुई

मुझे पता है कि यह पोस्ट पुरानी है, लेकिन मैं इसी मुद्दे में भाग गया और अंत में यह निर्धारित करने के लिए एक समाधान निकाला कि कौन सा कॉलम समस्या पैदा कर रहा था और आवश्यकतानुसार इसे वापस रिपोर्ट करें। मैंने पाया कि colid SqlException में लौटाया गया शून्य आधारित नहीं है, इसलिए आपको मान प्राप्त करने के लिए इसमें से 1 घटाना होगा। उसके बाद इसे _sortedColumnMappings . की अनुक्रमणिका के रूप में प्रयोग किया जाता है SqlBulkCopy इंस्टेंस की ArrayList कॉलम मैपिंग की अनुक्रमणिका नहीं है जो SqlBulkCopy इंस्टेंस में जोड़े गए थे। ध्यान देने वाली एक बात यह है कि SqlBulkCopy प्राप्त पहली त्रुटि पर रुक जाएगा, इसलिए यह एकमात्र मुद्दा नहीं हो सकता है लेकिन कम से कम इसे समझने में मदद करता है।

try
{
    bulkCopy.WriteToServer(importTable);
    sqlTran.Commit();
}    
catch (SqlException ex)
{
    if (ex.Message.Contains("Received an invalid column length from the bcp client for colid"))
    {
        string pattern = @"\d+";
        Match match = Regex.Match(ex.Message.ToString(), pattern);
        var index = Convert.ToInt32(match.Value) -1;

        FieldInfo fi = typeof(SqlBulkCopy).GetField("_sortedColumnMappings", BindingFlags.NonPublic | BindingFlags.Instance);
        var sortedColumns = fi.GetValue(bulkCopy);
        var items = (Object[])sortedColumns.GetType().GetField("_items", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(sortedColumns);

        FieldInfo itemdata = items[index].GetType().GetField("_metadata", BindingFlags.NonPublic | BindingFlags.Instance);
        var metadata = itemdata.GetValue(items[index]);

        var column = metadata.GetType().GetField("column", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata);
        var length = metadata.GetType().GetField("length", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(metadata);
        throw new DataFormatException(String.Format("Column: {0} contains data with a length greater than: {1}", column, length));
    }

    throw;
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL) में डेटाबेस मेल कतारों की स्थिति की जाँच करें

  2. एलडीएफ फाइल के बिना एमडीएफ फाइल अटैच करना

  3. SQLServer टाइमआउट अपवादों को कैसे पकड़ें

  4. टीएसक्यूएल ईमेल सत्यापन (रेगेक्स के बिना)

  5. अदिश चर @Id घोषित करना चाहिए?