C# 在C语言中将多行列定义读入一行#
我想将多行列定义读入一行 我的输入SQLC# 在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))
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);
}