C#如何在SqlDataAdapter中检索DateSet值?

时间:2014-02-18 05:45:12

标签: c# sql sql-server tsql dataset

在开发中,我打算从SQL Server数据库中检索索引键并应用于local.sdf数据库。但是,我无法从SQL Server数据库中检索索引键。那么,我怎样才能检索存储在DataSet中的值?

    E.g: tableName = "ProductTable", indexName = "IX_product". 

或者我的SqlDataAdapter没有返回任何值? P / s:我知道在论坛和stackoverflow中有很多工作教程,不幸的是,我无法让它工作。

    private void btnGetSchema_Click(object sernder, RoutedEventArgs e)
    {
        SyncDbSchema();
    }

    private void SyncDbSchema()
    {
        // setIndexSchema();
        DataSet dsIndex = getIndexSchema();

        MessageBox.Show("Table Row Count : " + dsIndex.Tables["tbIndex"].Rows.Count);
        for (int i = 0; i < dsIndex.Tables[0].Rows.Count; i++)
        {
            string tableName = dsIndex.Tables[0].Rows[i]["TableName"].ToString();
            string indexName = dsIndex.Tables[0].Rows[i]["IndexName"].ToString();
            string indexType = dsIndex.Tables[0].Rows[i]["IndexType"].ToString();

        }

    }

    public DataSet getIndexSchema()
    {
        SqlConnection conn = new SqlConnection(lblServerCon.Content.ToString());
        DataSet dataSet = new DataSet();
        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
        conn.Open();

        sqlDataAdapter = new SqlDataAdapter(String.Format(@"USE SyncServer SELECT T.[name] AS [TableName], I.[name] AS [IndexName], 
        COL_NAME(T.[object_id], IC.[column_id]) AS [ColumnName], I.[type] AS [IndexType], I.[is_unique] AS [Unique] 
        FROM sys.tables T INNER JOIN [sys].[indexes] I ON I.[object_id] = T.[object_id] 
        AND I.[is_primary_key] = '0'
        INNER JOIN [sys].[index_columns] IC ON IC.[object_id] = T.[object_id] 
        AND IC.[index_id] = I.[index_id]"), conn);

        sqlDataAdapter.FillSchema(dataSet, SchemaType.Source,"tbIndex");
        conn.Close();
        return dataSet;
    }

该查询在T-SQL中非常完美,可以获得我想要检索的结果。

TableName   IndexName   ColumnName  IndexType   Unique
tbReport    IX_tbReport_SID SalesID       2          0
tbReport    IX_tbReport_RID ReportID      2          0

1 个答案:

答案 0 :(得分:0)

您确定要使用FillSchema吗?

为什么不呢?

adapter.Fill(dataSet);

当然你可以先将它们组合起来FillSchema(但为什么需要它?),下一个数据(只是填充)