INSERT INTO Pax.SalesDocumentCoupon VALUES ('67c4158a-5d9f-4302-aaba-8fcddc0af552','3','TZX','SAW','','','EAOW','','00137','07-May-2013 12:00:00 AM','','','','E','','','','','','','','624','07-May-2013 12:00:00 AM','00137','TZX','SAW','Y','','F','N','False','X','fc12d5b5-c677-4207-81f4-5207a4f0705d','2481624807','6242481624807')
Filename : C:\Users\Relate 18\Desktop\PC DATA FILES\SAC\SAC0805201301_00002.txt
Table Name : Pax.SalesDocumentCoupon
Sql Stmt  :  INSERT INTO Pax.SalesDocumentCoupon VALUES ('67c4158a-5d9f-4302-aaba-8fcddc0af552','3','TZX','SAW','','','EAOW','','00137','07-May-2013 12:00:00 AM','','','','E','','','','','','','','624','07-May-2013 12:00:00 AM','00137','TZX','SAW','Y','','F','N','False','X','fc12d5b5-c677-4207-81f4-5207a4f0705d','2481624807','6242481624807')
Error Msg : Violation of PRIMARY KEY constraint 'PK_SalesDocumentCoupon'. Cannot insert duplicate key in object 'Pax.SalesDocumentCoupon'. The duplicate key value is (67c4158a-5d9f-4302-aaba-8fcddc0af552, 3).
The statement has been terminated.

 INSERT INTO Pax.SalesDocumentCoupon VALUES ('67c4158a-5d9f-4302-aaba-8fcddc0af552','4','SAW','BRU','','','GNBAGT','','00801','07-May-2013 12:00:00 AM','','','','G','','','','','','','','624','07-May-2013 12:00:00 AM','00801','SAW','BRU','Y','','F','N','False','X','f05365cd-9570-4b1c-b109-6ace5eaf1ea5','2481624807','6242481624807')
Filename : C:\Users\Relate 18\Desktop\PC DATA FILES\SAC\SAC0805201301_00002.txt
Table Name : Pax.SalesDocumentCoupon
Sql Stmt  :  INSERT INTO Pax.SalesDocumentCoupon VALUES ('67c4158a-5d9f-4302-aaba-8fcddc0af552','4','SAW','BRU','','','GNBAGT','','00801','07-May-2013 12:00:00 AM','','','','G','','','','','','','','624','07-May-2013 12:00:00 AM','00801','SAW','BRU','Y','','F','N','False','X','f05365cd-9570-4b1c-b109-6ace5eaf1ea5','2481624807','6242481624807')
Error Msg : Violation of PRIMARY KEY constraint 'PK_SalesDocumentCoupon'. Cannot insert duplicate key in object 'Pax.SalesDocumentCoupon'. The duplicate key value is (67c4158a-5d9f-4302-aaba-8fcddc0af552, 4).
The statement has been terminated.


我有上面的文件(有更多的块,我只显示了2个,其他的也一样)
我需要提取SQL语句以及随附的错误消息。

直到现在我尝试了下面的代码

        while ((sql_line = SR.ReadLine()) != null)
        {
            string RequiredLine1 = "Sql Stmt";
            //sql_line = SR.ReadLine();
            if (sql_line.Contains(RequiredLine1))
            {
                //crop out string that comes before:
                int index = sql_line.IndexOf(":") + 1;
                sql_line = sql_line.Substring(index);
            }
        }


        while ((error_line = SR.ReadLine()) != null)
        {

            string RequiredLine2 = "Error Msg";
            // error_line = SR.ReadLine();
            if (error_line.Contains(RequiredLine2))
            {
                //crop out string that comes before:
                int index = error_line.IndexOf(":") + 1;
                error_line = error_line.Substring(index);
            }
        }


但这是行不通的。
请帮忙。

最佳答案

您需要在一个while语句中执行此操作,否则您将永远不会收到错误行,并且需要将sql语句放在其他参数中:

    string RequiredLine2 = "Error Msg";
    string RequiredLine1 = "Sql Stmt";

    while ((sql_line = SR.ReadLine()) != null)
    {
        if (sql_line.Contains(RequiredLine1))
        {
            //crop out string that comes before:
            int index = sql_line.IndexOf(":") + 1;
            sql_stmt_line = sql_line.Substring(index);
        }

        // error_line = SR.ReadLine();
        if (error_line.Contains(RequiredLine2))
        {
            //crop out string that comes before:
            int index = error_line.IndexOf(":") + 1;
            error_line = error_line.Substring(index);
        }
    }


我也将RequiredLine2 / 1放在了while语句之外,因为一遍又一遍地创建相同的字符串没有意义。

另外,如果您要从文件中提取多个sql语句,则需要某种数据结构来保存它

关于c# - 从C#中的文本块中提取子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18458461/

10-12 12:42
查看更多