在开发中,我打算从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
答案 0 :(得分:0)
您确定要使用FillSchema吗?
为什么不呢?
adapter.Fill(dataSet);
当然你可以先将它们组合起来FillSchema(但为什么需要它?),下一个数据(只是填充)