2010-05-31 12 views
8

से कोई मैपिंग मौजूद नहीं है मेरे सरल पार्सिंग एप्लिकेशन के लिए कोड यहां दिया गया है। मुझे एक त्रुटि मिल रही है जिसमें कहा गया है कि 'सिस्टम मैपिंग से कोई मैपिंग मौजूद नहीं है। टेक्स्ट। रेग्युलरएक्सप्रेस। किसी ज्ञात प्रबंधित प्रदाता देशी प्रकार पर जाएं'। यह तब शुरू हुआ जब मैंने स्प्लिट ('_') से RegEx.Match को RNumberE, RNumberD, आदि को परिभाषित करने के लिए स्विच करने से स्विच किया। किसी भी मार्गदर्शन की सराहना की जाती है। सबसे कोड (SqlParameter सबसे अधिक संभावना जा रहा है) इस संभाल कर सकते हैं -त्रुटि: ऑब्जेक्ट प्रकार

using System; 
using System.Data; 
using System.Data.SQLite; 
using System.IO; 
using System.Text.RegularExpressions; 
using System.Threading; 
using System.Collections.Generic; 
using System.Linq; 
using System.Data.SqlClient; 


namespace CMMDataParser 
{ 
    internal class Program 
    { 


     public static List<string> GetImportedFileList() 
     { 
      List<string> ImportedFiles = new List<string>(); 
      using (SqlConnection connect = new SqlConnection(@"Server=SERVER;Database=RX_CMMData;Integrated Security=YES")) 
      { 
       connect.Open(); 
       using (SqlCommand fmd = connect.CreateCommand()) 
       { 

        fmd.CommandText = @"SELECT FileName FROM CMMData;"; 
        fmd.CommandType = CommandType.Text; 
        SqlDataReader r = fmd.ExecuteReader(); 
        while (r.Read()) 
        { 
         ImportedFiles.Add(Convert.ToString(r["FileName"])); 

        } 
       } 
      } 
      return ImportedFiles; 
     } 




     private static void Main(string[] args) 
     { 


      Console.Title = "John Deere CMM Data Parser"; 
      Console.WriteLine("Preparing CMM Data Parser... done"); 
      Console.WriteLine("Scanning for new CMM data..."); 
      Console.ForegroundColor = ConsoleColor.Gray; 

      using (SqlConnection con = new SqlConnection(@"Server=FRXSQLDEV;Database=RX_CMMData;Integrated Security=YES")) 
      { 


       con.Open(); 

       using (SqlCommand insertCommand = con.CreateCommand()) 
       { 
        Console.WriteLine("Connecting to SQL server..."); 
        SqlCommand cmdd = con.CreateCommand(); 
        string[] files = Directory.GetFiles(@"C:\Documents and Settings\js91162\Desktop\CMM WENZEL\", "*_*_*.txt", SearchOption.AllDirectories); 
        List<string> ImportedFiles = GetImportedFileList(); 
        insertCommand.Parameters.Add(new SqlParameter("@FeatType", DbType.String)); 
        insertCommand.Parameters.Add(new SqlParameter("@FeatName", DbType.String)); 
        insertCommand.Parameters.Add(new SqlParameter("@Axis", DbType.String)); 
        insertCommand.Parameters.Add(new SqlParameter("@Actual", DbType.Decimal)); 
        insertCommand.Parameters.Add(new SqlParameter("@Nominal", DbType.Decimal)); 
        insertCommand.Parameters.Add(new SqlParameter("@Dev", DbType.Decimal)); 
        insertCommand.Parameters.Add(new SqlParameter("@TolMin", DbType.Decimal)); 
        insertCommand.Parameters.Add(new SqlParameter("@TolPlus", DbType.Decimal)); 
        insertCommand.Parameters.Add(new SqlParameter("@OutOfTol", DbType.Decimal)); 

        foreach (string file in files.Except(ImportedFiles)) 

        { 
         var FileNameExt1 = Path.GetFileName(file); 
         cmdd.Parameters.Clear(); 
         cmdd.Parameters.Add(new SqlParameter("@FileExt", FileNameExt1)); 
         cmdd.CommandText = 
          @" 
        IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'RX_CMMData' AND TABLE_NAME = 'CMMData')) BEGIN SELECT COUNT(*) FROM CMMData WHERE FileName = @FileExt; END"; 



         int count = Convert.ToInt32(cmdd.ExecuteScalar()); 
         con.Close(); 
         con.Open(); 

         if (count == 0) 
         { 




           Console.WriteLine("Preparing to parse CMM data for SQL import..."); 
           if (file.Count(c => c == '_') > 5) continue; 

           insertCommand.CommandText = 
            @" 
        INSERT INTO CMMData (FeatType, FeatName, Axis, Actual, Nominal, Dev, TolMin, TolPlus, OutOfTol, PartNumber, CMMNumber, Date, FileName) 
        VALUES  (@FeatType, @FeatName, @Axis, @Actual, @Nominal, @Dev, @TolMin, @TolPlus, @OutOfTol, @PartNumber, @CMMNumber, @Date, @FileName);"; 




           string FileNameExt = Path.GetFullPath(file); 


           string RNumber = Path.GetFileNameWithoutExtension(file); 
           int index2 = RNumber.IndexOf("~"); 
           Match RNumberE = Regex.Match(RNumber, @"^(R|L)\d{6}(COMP|CRIT|TEST|SU[1-9])(?=_)", RegexOptions.IgnoreCase); 

           Match RNumberD = Regex.Match(RNumber, @"(?<=_)\d{3}[A-Z]\d{4}|\d{3}[A-Z]\d\w\w\d(?=_)", RegexOptions.IgnoreCase); 

           Match RNumberDate = Regex.Match(RNumber, @"(?<=_)\d{8}(?=_)", RegexOptions.IgnoreCase); 

           if (RNumberD.Value == @"") continue; 
           if (RNumberE.Value == @"") continue; 
           if (RNumberDate.Value == @"") continue; 
           if (index2 != -1) continue; 


          /* string RNumberE = RNumber.Split('_')[0]; 

           string RNumberD = RNumber.Split('_')[1]; 
           string RNumberDate = RNumber.Split('_')[2]; */ 

           DateTime dateTime = DateTime.ParseExact(RNumberDate.Value, "yyyyMMdd", Thread.CurrentThread.CurrentCulture); 
           string cmmDate = dateTime.ToString("dd-MMM-yyyy"); 


           string[] lines = File.ReadAllLines(file); 
           bool parse = false; 

           foreach (string tmpLine in lines) 
           { 


            string line = tmpLine.Trim(); 
            if (!parse && line.StartsWith("Feat. Type,")) 
            { 
             parse = true; 
             continue; 
            } 
            if (!parse || string.IsNullOrEmpty(line)) 
            { 
             continue; 
            } 

            Console.WriteLine(tmpLine); 
            foreach (SqlParameter parameter in insertCommand.Parameters) 
            { 
             parameter.Value = null; 
            } 

            string[] values = line.Split(new[] { ',' }); 

            for (int i = 0; i < values.Length - 1; i++) 
            { 
             SqlParameter param = insertCommand.Parameters[i]; 
             if (param.DbType == DbType.Decimal) 
             { 
              decimal value; 
              param.Value = decimal.TryParse(values[i], out value) ? value : 0; 
             } 
             else 
             { 
              param.Value = values[i]; 
             } 
            } 


            insertCommand.Parameters.Add(new SqlParameter("@PartNumber", RNumberE)); 
            insertCommand.Parameters.Add(new SqlParameter("@CMMNumber", RNumberD)); 
            insertCommand.Parameters.Add(new SqlParameter("@Date", cmmDate)); 
            insertCommand.Parameters.Add(new SqlParameter("@FileName", FileNameExt)); 
            insertCommand.ExecuteNonQuery(); 

             insertCommand.Parameters.RemoveAt("@PartNumber"); 
            insertCommand.Parameters.RemoveAt("@CMMNumber"); 
            insertCommand.Parameters.RemoveAt("@Date"); 
            insertCommand.Parameters.RemoveAt("@FileName"); 

           } 


          } 

           } 
         Console.WriteLine("CMM data successfully imported to SQL database..."); 

        } 
        con.Close(); 

      } 
     } 
    } 
} 

उत्तर

11

मूल कोड में, RNumberD आदि string हैं। संशोधित कोड में, यह एक regex Match है, जो एक जटिल वस्तु है जो एक मैच की पूर्ण स्थिति का प्रतिनिधित्व करती है, केवल मिलान की गई स्ट्रिंग नहीं है। मैं तो आप बस के स्थान पर RNumberD.Value (मिलान वाला पाठ का string) उपयोग करने की आवश्यकता की उम्मीद सिर्फ RNumberD जब यह एक (SQL) पैरामीटर के रूप में जोड़ने:

insertCommand.Parameters.Add(new SqlParameter("@CMMNumber", RNumberD.Value)); 

(आदि)

+0

मदद के लिए धन्यवाद! –

संबंधित मुद्दे