0

我有一个到数据库视图(SQL Server 2008 R2)的连接。但我不知道任何列。我需要选择该视图上的所有内容。我怎样才能通过使用来做到这一点SqlDataReader

SqlConnection con = new SqlConnection(conString);
con.Open();
SqlCommand command = new SqlCommand("select * from vw_Haber_Baslik_Ozet", con);
SqlDataReader reader = command.ExecuteReader();

while (reader.Read())
{
    //reader.get?? I will write the things I get to a file
}

reader.Close();
con.Close();

一旦我了解了这个视图的结构,我就可以创建一个适当的类来存储值。但是我怎样才能学习结构呢?

4

5 回答 5

0

有两种选择:

读取数据表中的所有内容

DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(dt);

或使用GetSchemaTables

DataTable schema;
SqlDataReader reader = command.ExecuteReader();
schema = reader.GetSchemaTable();

第一种方法需要加载数据,而第二种方法返回一个数据表,其中每一行包含表的单个列上的所有可用信息

于 2013-06-20T13:55:41.737 回答
0

如果您只想知道列和类型。

从 [YourTable 或 View] 中选择 *,其中 1=0;

将它与 DataAdapter 一起使用,填充到 DataTable 中。

然后以编程方式或使用手表读取表格。

但是,如果您使用模式方法(GetSchemaTables),您将获得更多(您可能想要也可能不想要) - 可空性、约束、身份等。

于 2013-06-20T14:54:28.613 回答
0

如果只是想了解返回的表是什么样子,最好先将数据加载到数据集中并在填充数据集后设置断点,以便您可以检查它:

using (var connection = new SqlConnection(conString))
{
     var command = new SqlCommand(..., connection);
     var apapter - new SqlDataAdapter(command);

     var ds = new DataSet();
     connection.Open();

     adapter.Fill(ds);

     if (ds.Tables.Count >= 1)  <<--  Set a breakpoint here and inspect the dataset
     {
        ...
     }
}
于 2013-06-20T13:51:32.920 回答
0

SqlDataReader 有一个名为 FieldCount 的属性,它返回一行中的列数。如果您迭代执行 GetName() 方法的列数,并将列号作为参数传递,那么您可能可以这样做。

于 2013-06-20T13:51:43.217 回答
0

如果将其读入 DataSet,则可以使用 DataTable 循环遍历 Columns 或 Rows 等:

        SqlConnection con = new SqlConnection(conString);
        con.Open();
        SqlCommand command = new SqlCommand("select * from vw_Haber_Baslik_Ozet", con);
        SqlDataAdapter adapter = new SqlDataAdapter(command.CommandText, con);
        DataSet ds = new DataSet();
        adapter.Fill(ds);
        foreach (DataColumn dc in ds.Tables[0].Columns)
        {
            String colName = dc.ColumnName;
            String valueOfCol1 = ds.Tables[0].Rows[0][dc.ColumnName].ToString();
        }
        con.Close();
于 2013-06-20T13:52:46.723 回答