是否可以从任何数据库文件中读取?

时间:2016-10-31 13:24:02

标签: c# sql-server winforms

我有一个数据库,其中包含一些已读入我的c#应用程序的表。有没有办法读取添加到数据库的任何表的前两列,而不是在我的代码中写入拉出特定表的查询?例如,下面是我的代码,它读取Liguanea_Lane表并填充自动填充文本字段

 private void liguaneaRxToolStripMenuItem_Click(object sender, EventArgs e)
    {
        this.liguanea_LaneTableAdapter1.Fill(this.pharmaciesDataSet1.Liguanea_Lane);
        try
        {

            string connectionString = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
            SqlConnection con = new SqlConnection(connectionString);
            con.Open();
            string query = "SELECT Code FROM dbo.Liguanea_Lane";
            SqlCommand cmd = new SqlCommand(query, con);

            SqlDataReader dr = cmd.ExecuteReader();
            AutoCompleteStringCollection mycollection = new AutoCompleteStringCollection();
            while (dr.Read())
            {

                mycollection.Add(dr.GetString(0));

            }
            textBox2.AutoCompleteCustomSource = mycollection;
            con.Close();
        }
        catch (Exception ex)
        {

            MessageBox.Show(ex.ToString());
        }

不是在特定的表及其列中读取,有没有办法可以读取任何表格?意思是说我创建一个名为“Cat_values”的表如何将第一列或第二列数据读入我的c#代码?每次添加一个新表时,不必每次都进入代码,如上面的代码所示,

1 个答案:

答案 0 :(得分:1)

您可以通过执行以下查询来获取数据库中的所有表名:

SELECT TABLE_NAME FROM YOURDB.INFORMATION_SCHEMA.Tables WHERE TABLE_TYPE = 'BASE TABLE'

为了管理自上次检查以来添加的表,您可以创建一个包含所有现有表名的表,如下所示:

CREATE TABLE [dbo].[DatabaseTables](
    [TableName] [nvarchar](64) NOT NULL PRIMARY KEY,
    [DateAdded] [datetime] NOT NULL DEFAULT (getdate())
)

每次检查添加的表时,执行以下语句以更新包含数据库表的表:

INSERT INTO DatabaseTables(TableName)
SELECT TABLE_NAME FROM YOURDB.INFORMATION_SCHEMA.Tables 
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME NOT IN (SELECT TableName FROM DatabaseTables)