无法从数据库中检索所有数据表的名称

13 浏览
0 Comments

无法从数据库中检索所有数据表的名称

我正在开发一些代码,用于从数据库中列出数据表的名称及其对应的列。我希望能够在MS SQL Report Builder的查询设计器中看到与之相同的列表:

Query designer from Report Builder

以下是我的代码:

SqlConnection conn = new SqlConnection("Data Source = server; Initial catalog = Catalog; Integrated Security = true");
conn.Open();
DataTable dt = conn.GetSchema("Tables");
List tablenames = new List();
foreach(DataRow dr in dt.Rows){
     string table = (string)dr[2];
     if((string)dr[1] == "dbo"){
          //为"dbo"架构创建一个表名列表
          tablenames.Add(table);
     }
}
foreach(string table in tablenames){
     if(true){
          SqlDataReader reader = new SqlCommand("SELECT * FROM " + table, conn).ExecuteReader();
          //遍历整个表名列表并获取列名
          for(int column = 0; column < reader.FieldCount; column++){
               Console.WriteLine("Catalog - dbo - " + table + " - " + reader.GetName(column));
          }
          reader.Close();
     }
}
Console.WriteLine("END");
Console.ReadLine();

然而,我得到的列表中没有显示(除其他外)第一个表"AccountBillingCode",尽管我知道它包含在字符串列表中。

如果我将语句:

if(true)

改为

if(table.StartsWith('A'))

那么"AccountBillingCode"将会在输出中列出。

我不明白为什么我的代码中有一些表被排除在外。

有什么想法吗?

谢谢!

0
0 Comments

问题原因:代码太长,导致在控制台中复制时顶部内容丢失。

解决方法:在控制台中无法一次性复制所有代码,可以尝试以下解决方法:

1. 分段复制:将代码分成多个部分,分别复制粘贴。

2. 使用文件导出:将代码保存到一个文件中,然后从文件中复制粘贴。

3. 使用代码编辑器:将代码粘贴到代码编辑器中,如Visual Studio Code,再进行复制。

实际上,这个问题并不是代码本身有问题,只是因为代码太长,导致复制时丢失了顶部内容。对于这个问题的解决方法,可以根据个人习惯和使用环境选择合适的方式来复制代码。希望以上解决方法能帮助到你。

0
0 Comments

无法从数据库中检索到所有数据表名的原因可能是由于以下原因之一:

1. 数据库连接错误或数据库服务器不可用。

2. 数据库权限限制了对数据表名的访问。

3. 数据库中没有任何数据表存在。

解决该问题的方法可能是:

1. 确保数据库服务器正常运行,并且连接字符串正确配置。

2. 检查数据库用户的权限,确保其有足够的权限来访问数据表名。

3. 确认数据库中存在数据表,可以通过查询系统表或使用数据库管理工具来验证。

以下是一种可能的解决方法示例:

import pyodbc
# 配置数据库连接字符串
conn_str = 'DRIVER={SQL Server};SERVER=your_server_name;DATABASE=your_database_name;UID=your_username;PWD=your_password'
try:
    # 建立数据库连接
    conn = pyodbc.connect(conn_str)
    # 创建游标
    cursor = conn.cursor()
    # 执行查询语句
    cursor.execute("SELECT name FROM sys.tables")
    # 获取查询结果
    tables = cursor.fetchall()
    # 输出数据表名
    for table in tables:
        print(table[0])
    # 关闭游标和连接
    cursor.close()
    conn.close()
except pyodbc.Error as e:
    print("数据库连接错误:", e)

以上示例代码使用了pyodbc库来连接数据库,并执行了一个查询语句以获取所有数据表的名称。如果成功连接并获取到了数据表名,则会逐个输出。如果发生了数据库连接错误,则会输出相应的错误信息。

通过以上解决方法,您应该能够解决无法从数据库中检索到所有数据表名的问题。

0