C# 在C语言中将多行列定义读入一行#

C# 在C语言中将多行列定义读入一行#,c#,sql-server,visual-studio,foreach,sqldatareader,C#,Sql Server,Visual Studio,Foreach,Sqldatareader,我想将多行列定义读入一行 我的输入SQLviewquery如下所示 Create or replace view productsview AS SELECT CAST('PS' AS VARCHAR(30)) + CAST(o.Process_id AS VARCHAR(4)) + '^' + CAST(o.process_startid AS VARCHAR(3)) AS ProcessId ,CAST('o.Product_name' AS VARCHAR(30))

我想将多行列定义读入一行

我的输入SQL
view
query如下所示

Create or replace view productsview
AS
SELECT
  CAST('PS' AS VARCHAR(30)) + CAST(o.Process_id AS VARCHAR(4)) + '^' +      
  CAST(o.process_startid AS VARCHAR(3))  AS ProcessId
 ,CAST('o.Product_name' AS VARCHAR(30)) + CAST(o.Proc_name AS VARCHAR(3)) AS ProductName
 ,CAST(o.product_type AS VARCHAR(4)) AS productType      
,CAST(o.Process_start AS VARCHAR(3))+ CAST(o.process_end AS VARCHAR(3)) AS processperiod    
,CAST(o.LastmodifiedDate) AS LastmodifiedDate
列定义
ProcessId
继续到第二行。我想在一行中阅读它,因为我的程序设计为在一行中读取每个列定义

视图
查询的预期输出应如下所示:

CAST('PS' AS VARCHAR(30)) + CAST(o.Process_id AS VARCHAR(4)) + '^' + CAST(o.process_startid AS VARCHAR(3))  AS ProcessId
,CAST('o.Product_name' AS VARCHAR(30)) + CAST(o.Proc_name AS VARCHAR(3)) AS ProductName
,CAST(o.product_type AS VARCHAR(4)) AS productType      
,CAST(o.Process_start AS VARCHAR(3))+ CAST(o.process_end AS VARCHAR(3)) AS processperiod    
,CAST(o.LastmodifiedDate) AS LastmodifiedDate
我尝试了以下
C#
code。但是,我没有得到正确的输出

string connectionString, query;
var coltab = new List<ColumnInfo>();
var lsql = new List<String>();
var tlist = new List<String>();

foreach (string cur in tlist)
{

    query = @"SELECT c.[obj_id],c.[cname],c.col_id
                    FROM sys.columns c
                    JOIN sys.views v
                    ON c.object_id = v.object_id
                    where v.name LIKE '%productsview%'";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(query, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
                coltab.Add(new ColumnInfo { obj_id = reader.GetInt32(0), cname = reader.GetString(1), colid = reader.GetInt32(2) });
        }
        finally
        {
            reader.Close();
            connection.Close();
        }
    }
    query = @"DECLARE 
                  @olddelim nvarchar(32) = char(13) + Char(10),
                  @newdelim nchar(1)     = NCHAR(9999); 

                  SELECT * FROM STRING_SPLIT(REPLACE(OBJECT_DEFINITION(obj_id('productsview')), @olddelim, @newdelim), @newdelim);";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(query, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
                lsql.Add(reader.GetString(0));
        }
        finally
        {
            reader.Close();
            connection.Close();
        }
    }                
    foreach (ColumnInfo column in coltab)
    {
        int ln = 0;
        foreach (string sline in lsql)
        {
            int cm = -1;
            cm = sline.IndexOf(column.cname);
            if (cm > -1)
            {
                int im = 0;
                foreach (ColumnInfo colsearch in coltab)
               
                    if (colsearch.cname.Contains(lsql[ln - 1]))
                    {
                        im = im + 1;
                        break;
                    }
                    else
                        im = 0;
                }

                if (im >= 1)
                {
                    System.Console.WriteLine("do not combine");
                }
                else
                {
                    string sr = lsql[ln - 1];
                    string sr1 = sr + sline;
                    System.Console.WriteLine(sr1);
                    
                }
            }
          
            ln = ln + 1;
        }
    }

有没有办法得到正确的输出?

请详细说明一下?。我不知道它到底有多适用。我是C#的新手。我注意到您在foreach中嵌套了多个foreach。你能详细说明一下吗?您想要什么样的输出?
else
{
     string sr = lsql[ln - 1];
     string sr1 = sr + sline;
     System.Console.WriteLine(sr1);
                    
}