当前位置: 首页 > 面试题库 >

需要找到数据库列的类型

时修贤
2023-03-14
问题内容

这是我的代码。我要获取数据库中存在的所有表名和列名。现在我需要知道列的类型,例如其int或varchar或其他内容。在这方面有人可以帮助我吗?顺便说一句,这是C#。

OleDbConnection con = new OleDbConnection(connectionString);
DataTable schemaCols;
DataTable schemaTbl;
List<string> tablesnames = new List<string>();
string returnString="";

try
{
    con.Open();
    object[] objArrRestrict;
    objArrRestrict = new object[] { null, null, null, "TABLE" };
    schemaTbl = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, objArrRestrict);
    foreach (DataRow row in schemaTbl.Rows)
    {
        tablesnames.Add(row["TABLE_NAME"].ToString());
    }
    List<string> columnnames = new List<string>();
    foreach (string str in tablesnames)
    {
         string selTbl = str;

        //con.Open();
        object[] objArrRestrictNew;
        objArrRestrictNew = new object[] { null, null, selTbl, null };
        //
        schemaCols = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, objArrRestrictNew);

        foreach (DataRow row in schemaCols.Rows)
        {
            columnnames.Add(row["COLUMN_NAME"].ToString());

        }
     }
   }

问题答案:

一种方法是使用OleDbCommand.ExecuteReader读取找到的每个表的架构

    OleDbConnection con = new OleDbConnection(connectionString);
    DataSet tablesFromDB = new DataSet();
    DataTable schemaTbl;
    try
    {
        // Open the connection
        con.Open();
        object[] objArrRestrict = new object[] { null, null, null, "TABLE" };

        // Get the table names from the database we're connected to
        schemaTbl = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, objArrRestrict);

        // Not sure if this is correct syntax...fix it if it isn't :)
        String commandText = @"SELECT * FROM {0}";

        // Get each table name that we just found and get the schema for that table.
        foreach (DataRow row in schemaTbl)
        {
            DataTable dt = new DataTable();
            OleDbCommand command = new OleDbCommand(String.Format(commandText, row["TABLE_NAME"] as String), con);
            dt.Load(command.ExecuteReader(CommandBehavior.SchemaOnly));
            tablesFromDB.Tables.Add(dt);
        }
    }

这样,您可以遍历DataSet的DataTable集合并获取列名称和列字段类型。

foreach (DataTable dt in tablesFromDB)
{
    foreach (DataColumn dc in dt.Columns)
    {
        // Do something with the column names and types here
        // dc.ColumnName is the column name for the current table
        // dc.DataType.ToString() is the name of the type of data in the column
    }
}

这样做可能是更好的方法,但是我认为这是一个开始。



 类似资料:
  • 我有一个完整的数据库托管,我想把它集成到我的laravel新项目。我只知道如何更改env文件,我就是这么做的。不过有几个问题: > 使用laravel联机数据库是否需要创建类? 我应该向env文件添加什么?这个从我的env文件: DB_CONNECTION=MySQL DB_HOST=(我的服务器IP) DB_PORT=3306 DB_DATABASE=name DB_USERNAME=完成 DB

  • 问题内容: 每当启动应用程序spring启动时,我都会收到以下错误。 申请开始失败 描述: com.base.model.AbstractDao中的现场会话需要找不到“ org.hibernate.SessionFactory”类型的Bean。 行动: 考虑在配置中定义类型为“ org.hibernate.SessionFactory”的bean。 我添加了我的应用程序的实现: POM.xml 应

  • 我已经提到了为什么在Spring Boot期间找不到bean?和“字段需要找不到类型的bean。”使用mongodb的spring restful API出错 CustomerService只是一个接口,充当CustomerController和CustomerService实施之间的中间人,它实际上在CustomerRepository的帮助下对数据库执行操作。 我正在尝试从MYSQL数据库中检

  • 我是一名spring boot学习者,所以我一直在尝试创建一些基本的spring boot应用程序。我试图运行开发的应用程序时出错。 我的错误是[[https://i.stack.imgur.com/oyQDi.png][1]][1] java: ItemDetails.java:[软件包名称:io.ajithan.springbootstarter.model] ItemResponse.jav

  • 结构没有问题。spring boot可以扫描UserMapper,但不能扫描UserService。我试着给我的UserService@Mapper组件,然后它就可以被扫描了。但我不知道如何使用其他方法进行扫描。我尝试了@服务,但不起作用。

  • 我搜索了很多stackoverflow,但没有找到解决问题的方法。当将SpringBoot应用程序作为WAR文件部署到Tomcat 8时,我发现以下错误,在本地它确实可以正常工作 有一个接口 和两个实现类 和二等舱 还有Rest服务 所以我不明白Tomcat怎么找不到像boolean这样的原始数据类型,也不明白为什么我在本地运行它时它能工作。 任何帮助都将不胜感激 问候马蒂亚斯