有没有办法从c#中的连接字符串中获取表层次结构?

时间:2011-05-16 00:06:20

标签: c# sqlclient

我当前要求从c#中的sql语句中确定表层次结构。例如,请考虑以下sql语句:

Select Table1.*, Table2.* from Table1 
left join table2 on Table1.parentCol = Table2.childCol

这可能会返回7列,Table1为3,table2为4。我需要知道列名,理想情况(虽然不是强制性的)他们的类型。

我无法控制将使用哪种SQL语句,因为这是用户输入的字段。在C#中,使用该语句打开连接并创建SqlCommand是一项非常基本的任务。如果有必要,我可以自由地将SQL运行到SqlDataReader或任何其他System.Data.SqlClient类中,但是我找不到任何会返回列的组合,而不是实际的列值。

有人能帮忙吗?

非常感谢和最好的问候

2 个答案:

答案 0 :(得分:2)

你不能(轻松地)做你想要的事。

更重要的是,不要让用户输入任意TSQL(你会在某些时候后悔...)。

相反,创建一个“搜索”表单,允许输入各种参数并将参数化查询用于连接所需的所有表/列的视图。

答案 1 :(得分:0)

没有直接的方法。您需要从sql查询中解析所有表的名称。

完成后,您需要在Information_Schema上写几个查询,以获取您要查找的内容的原始数据。

如果您使用的是SQL Server,则可能需要使用Catalog View

前 -

Select * from sys.tables where [Name] = 'MyTable'