Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从SQL中的表/视图中读取多行写入的列名定义_C#_Sql_Tsql_Sqldatareader - Fatal编程技术网

C# 从SQL中的表/视图中读取多行写入的列名定义

C# 从SQL中的表/视图中读取多行写入的列名定义,c#,sql,tsql,sqldatareader,C#,Sql,Tsql,Sqldatareader,我在视图中有类似的列名 我想通过在我的C程序中传递下面的sql查询来检索这些列名 只有当所有列名都在一行中时,此代码才能正常运行。但是,如果单列定义写在多行中,则无法读取该列名。此外,如果在一行中写入多个列名,那么它也不会读取该列名 例如,列名LastModifiedDate既不被程序识别也不被程序读取,因为它无法识别列定义的开始。同样,ProductionStartDate也不会被读取 我希望程序能够正确识别并读取所有列名,这样就不会遗漏任何列名。更改查询。您可以轻松地从字典中查询视图的列名。

我在视图中有类似的列名

我想通过在我的C程序中传递下面的sql查询来检索这些列名

只有当所有列名都在一行中时,此代码才能正常运行。但是,如果单列定义写在多行中,则无法读取该列名。此外,如果在一行中写入多个列名,那么它也不会读取该列名

例如,列名LastModifiedDate既不被程序识别也不被程序读取,因为它无法识别列定义的开始。同样,ProductionStartDate也不会被读取


我希望程序能够正确识别并读取所有列名,这样就不会遗漏任何列名。

更改查询。您可以轻松地从字典中查询视图的列名。没有必要为此解析create语句

SELECT c.name
       FROM sys.columns c
            INNER JOIN sys.views v
                       ON c.object_id = v.object_id
            INNER JOIN sys.schemas s
                       ON s.schema_id = v.schema_id
       WHERE s.name = 'sge'
             AND v.name = 'vwProduct'
       ORDER BY c.column_id;
具有不同的对象名称;但这应该足以作为证明


但是请注意,SqlDataReader是一次性的,所以您应该像处理连接一样处理它或使用它。

更改查询。您可以轻松地从字典中查询视图的列名。没有必要为此解析create语句

SELECT c.name
       FROM sys.columns c
            INNER JOIN sys.views v
                       ON c.object_id = v.object_id
            INNER JOIN sys.schemas s
                       ON s.schema_id = v.schema_id
       WHERE s.name = 'sge'
             AND v.name = 'vwProduct'
       ORDER BY c.column_id;
具有不同的对象名称;但这应该足以作为证明


但请注意,SqlDataReader是一次性的,因此,您应该像处理连接一样处理它或使用。

您只需要列名称列表或每个列的完整定义列表?我只需要从view@stickybit我只需要从一个视图中检索所有列名,您只需要一个列或每列的完整定义列表?我只需要从view@stickybit位我只需要从视图中检索所有列名我想在我的c程序@DECLARE@olddelim nvarchar32=char13+Char10中传递此查询字符串时修改此查询字符串,@newdelim-nchar1=NCHAR9999;从字符串_SPLITREPLACEOBJECT_DEFINITIONobject_id'sge.vwProduct'、@olddelim、@newdelim、@newdelim;中选择*;;是的,将其更改为我在答案中给出的查询-query=SELECT c.name…;-并像现在执行另一个查询一样执行它。我建议对代码的其余部分进行更改的唯一一件事是处理读取器-请参见编辑。我已经在程序的第一部分将此查询字符串作为“``querystring=@SELECT c.[object\u id]、c.[name]、c.column\u id FROM sys.columns c JOIN sys.views v ON c.object\u id=v.object\u id其中v.name类似于“%vw%”;``然后建立sql连接,然后传递第二个查询@Declare…,并建立sql连接。但是,程序仅在写入一行时读取列名称定义,而不读取写入多行的列名称。是的,我使用了using System.Data.sqlclient,我想在我的c程序@DECLARE@olddelim nvarchar32=char13+Char10,@newdelim nchar1=NCHAR9999中传递这个查询字符串时修改它;从字符串_SPLITREPLACEOBJECT_DEFINITIONobject_id'sge.vwProduct'、@olddelim、@newdelim、@newdelim;中选择*;;是的,将其更改为我在答案中给出的查询-query=SELECT c.name…;-并像现在执行另一个查询一样执行它。我建议对代码的其余部分进行更改的唯一一件事是处理读取器-请参见编辑。我已经在程序的第一部分将此查询字符串作为“``querystring=@SELECT c.[object\u id]、c.[name]、c.column\u id FROM sys.columns c JOIN sys.views v ON c.object\u id=v.object\u id其中v.name类似于“%vw%”;``然后建立sql连接,然后传递第二个查询@Declare…,并建立sql连接。但是,程序仅在写入一行时读取列名称定义,而不读取写入多行的列名称。是的,我使用过System.Data.SqlClient
SELECT c.name
       FROM sys.columns c
            INNER JOIN sys.views v
                       ON c.object_id = v.object_id
            INNER JOIN sys.schemas s
                       ON s.schema_id = v.schema_id
       WHERE s.name = 'sge'
             AND v.name = 'vwProduct'
       ORDER BY c.column_id;