Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从一张我不知道桌子结构的桌子上读_C#_Sql_Sql Server 2008 R2_Sqldatareader - Fatal编程技术网

C# 从一张我不知道桌子结构的桌子上读

C# 从一张我不知道桌子结构的桌子上读,c#,sql,sql-server-2008-r2,sqldatareader,C#,Sql,Sql Server 2008 R2,Sqldatareader,我已连接到数据库视图(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.Exe

我已连接到数据库视图(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();

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

如果只是想了解返回表的外观,那么最好先将数据加载到数据集中,然后在填充数据集后设置断点,以便对其进行检查:

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
     {
        ...
     }
}
使用(var连接=新的SqlConnection(conString))
{
var命令=新的SqlCommand(…,连接);
var apapter-新的SqlDataAdapter(命令);
var ds=新数据集();
connection.Open();
适配器。填充(ds);

如果(ds.Tables.Count>=1)有一个名为FieldCount的SqlDataReader属性,该属性重新计算行中的列数。如果迭代执行GetName()的列数方法,并将列号作为参数传递,则您可能可以这样做。

如果您将其读取到数据集中,则可以使用DataTable循环列或行等:

        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();
有两种选择:

读取数据表中的所有数据

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


第一种方法需要加载数据,而第二种方法返回一个datatable,其中每一行都包含表中单个列的所有可用信息,如果您只想知道列和类型的话

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

将其与DataAdapter一起填充到DataTable中

然后通过编程或用手表阅读表格


但是,如果您使用schema方法(GetSchemaTables),您会得到更多(可能需要也可能不需要)-可空性、约束、标识等。

您最好使用SqlDataAdapter填充表格,从DataTable.Columns获取信息会更容易。
DataTable schema;
SqlDataReader reader = command.ExecuteReader();
schema = reader.GetSchemaTable();