2012-03-13 60 views
2

我正在使用Visual Studio 2008.从SQL语句中检索元数据(表名)

我创建了Winforms应用程序,并试图从SQL语句中提取表名。

con = new SqlConnection(connString); 
String queryString = "Select CUSTOMER_NAME from CUSTOMER_DETAIL"; 

有没有这样做的功能?

请帮助我。

+3

嗨@C_J,SQL查询有时可能会非常复杂,并且有多个表等,你到底想要做什么?也许更具体一些。 – joshuahealy 2012-03-13 04:45:32

+0

在Java中有ResultSetMetaData接口是否有任何类似这个接口或类给出关于表的元数据 – 2012-03-13 04:49:51

+1

@C_J在我的答案没有帮助的情况下,我已经重新标记了问题(添加了Java标记),我认为具有C#和Java经验的程序员将帮助您更多。我没有Java的经验,我的回答是基于我读过的([link's here])(http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSetMetaData.html ))关于“ResultSetMetaData”,所以我可能会误解。 – 2012-03-13 06:54:55

回答

1

这很好,你已经提到Java的ResultSetMetaData。引用该链接:

公共接口ResultSetMetaData的

的,可用于获取有关类型和ResultSet对象列 属性的信息对象。

至于C#,您可以使用DataColumn Class获取相同的信息。

DataTypeDataColumn类的属性可以用来获得(和设置)存储在列中的数据的类型,AllowDBNull可用于获得(和设置),指示空值是否被允许在此列中的值,等等......要获得DataColumn属性的完整列表,请按照我上面发布的链接进行操作。

示例代码(获取列数据类型):

SqlConnection con = new SqlConnection(connString); 
String queryString = "Select CUSTOMER_NAME from CUSTOMER_DETAIL"; 
SqlCommand cmd = new SqlCommand(queryString, con); 
DataTable myTable = new DataTable(); 
myTable.Load(cmd.ExecuteReader()); 
DataColumn column = myTable.Columns[0]; // zero based index of column, alternatively use column name 
string typeOfColumn = column.DataType.Name; // or column.DataType.FullName to get the fully qualified name of the System.Type 
+0

Thanx @ Niko,我创建了一个方法,它给了我从简单查询(Select * from Tablename)的表名,现在我试图从Join查询 – 2012-03-13 06:58:05

+0

@C_J检索表名,所以问题只是关于表名?因为在阅读您的评论之后,我认为'DataColumn'类是您正在寻找的那个。 – 2012-03-13 07:00:28

+1

,我需要在SQL字符串query.that中的表名称,因为我想在CRUD中创建检索技术 – 2012-03-13 07:10:15

1
  • 尝试使用“互操作 - SQLDMO”
  • 否则,你可能需要编写自己的自定义类
  • 不是相反使用评估字符串的函数(其中我建议你制作一个自定义SQL查询构建器类(按照您的要求),然后编写您的方法或扩展来实现获取查询元数据的目标。
  • 也就是说,如果您没有选项,但直接在您的C#代码中使用SQL查询

希望这有助于。

0

这是给我们的tablename只是改变SQL查询字符串的方法,连接字符串 工程用简单的查询,加入过

public static List<string> getTablenames(string connString,string QueryString) 
    { 

     SqlConnection con = new SqlConnection(connString); 
     con.Open(); 
     DataTable dt = con.GetSchema("Tables"); 

     List<string> getTableName = new List<string>(); 
     List<string> tablenames = new List<string>(); 

     foreach (DataRow dr in dt.Rows) 
     { 
      tablenames.Add(dr[2].ToString()); 
     } 
     for (int ii = 0; ii < dt.Rows.Count; ii++) 
     { 
      string myTable = tablenames[ii]; 
      Boolean checkMyTable = QueryString.Contains(myTable); 
      if (checkMyTable == true) 
      { 
        getTableName.Add(myTable); 
      } 
     } 
     con.Close(); 
     return getTableName; 
    } 

thanxx StackoverFlow