2008-12-20 4 views
0

C#을 사용하여 SQL Express 서버의 모든 데이터로 DataSet을 가져 오는 방법은 무엇입니까?SQL Express 서버에서 DataSet 가져 오기 C#

감사

편집 : 명확히하기 위해 나는 모든 테이블의 모든 데이터를 원하는 않습니다. 그 이유는 상대적으로 작은 데이터베이스라는 것입니다. 이전에는 DataSet의 기능을 사용하여 XML 파일에 세 개의 테이블을 모두 저장했습니다. 그러나 데이터베이스로 마이그레이션하려고합니다.

+0

어, 죄송하지만 편집 내용이 통하지 않습니다. * 데이터베이스에서 데이터를 가져 오거나 * 데이터베이스에서 * 데이터를 가져 오시겠습니까? –

+0

나중에, 다시 넣을 수는 있지만 더 생각하면할수록 실현 가능성은 낮아집니다. – Malfist

+0

사실, 귀하의 질문에 실제로 답변하기에는 너무 적은 정보를 주셨습니다. 그게 당신이하기로 한 것이기 때문에, 당신 만이 당신의 질문에 대한 진정한 답을 알 수 있습니다. –

답변

2

GetSchema 메서드를 사용하여 데이터베이스의 모든 테이블을 가져온 다음 데이터 어댑터를 사용하여 데이터 집합을 채울 수 있습니다. 이런 식으로 뭔가 (이 컴파일하면 내가 모르는 난 그냥 몇 가지 코드를 붙여 그것을 약간 수정) :

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); 

DataTable tables = null; 
DataSet database = new DataSet(); 

using (DbConnection connection = factory.CreateConnection()) 
{ 

    connection.ConnectionString = "Data Source=(local);Initial Catalog=Northwind;Integrated Security=True"; 

    string[] restrictions = new string[4]; 

    // Catalog 
    restrictions[0] = "Northwind"; 

    // Owner 
    restrictions[1] = "dbo"; 

    // Table - We want all, so null 
    restrictions[2] = null; 

    // Table Type - Only tables and not views 
    restrictions[3] = "BASE TABLE"; 

    connection.Open(); 

    // Here is my list of tables 
    tables = connection.GetSchema("Tables", restrictions); 

    // fill the dataset with the table data 
    foreach (DataRow table in tables.Rows) 
    { 

     string tableName = table["TABLE_NAME"].ToString(); 

     DbDataAdapter adapter = factory.CreateDataAdapter(); 
     DbCommand command = factory.CreateCommand(); 
     command.Connection = connection; 
     command.CommandType = CommandType.Text; 
     command.CommandText = "select * from [" + tableName + "]"; 
     adapter.SelectCommand = command; 
     adapter.Fill(database, tableName); 

    } 

} 

편집 : 나는 그것을 조금 리팩토링하고 지금은 일하고 이제

그것은해야한다.

DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OracleClient"); 

GetSchema 방법은 당신의 데이터베이스에서 모든 테이블을 가져 오지 않습니다 :이 라인과 연결 문자열을 변경 데이터베이스 엔진을 변경할 수 있도록 DbConnection 및 DbProviderFactories의 사용은 데이터베이스 엔진 추상화입니다, 나는 그것을 사용하는 것이 좋습니다 DataTable을 만들고 각 테이블의 모든 데이터를 DataAdapter를 사용하여 DataSet으로 가져옵니다.

+0

이 방법을 조금 더 설명해 주시겠습니까? 감사. – Malfist

+0

이것은 연결을 열고 DbConnection을 SqlConnection으로 변환해야한다는 것을 제외하고는 효과적입니다. 도움을 주셔서 감사합니다. – Malfist

2

질문을 다소 좁힐 필요가 있다고 생각합니다. 모두 데이터가 맞습니까? 모든 데이터베이스의 모든 테이블에있는 모든 데이터를 의미합니까? 음, 그 유일한 대답은 코드가 많습니다.입니다.

즉, System.Data.SqlClient 네임 스페이스의 클래스를 사용하여 연결하고 SQL Server Express의 데이터베이스 엔진 이야기 :

데이터베이스에서 검색 데이터에 반복 위의 링크를 클릭하여 클래스를 선택하십시오.

참고 전반적으로, 당신은 같은 SQL Server Express는 데이터베이스 엔진 같은 방법을 사용 : 여기

자세한 내용은 일부 개요 - 링크입니다 전체 SQL Server 제품의 차이점은 도구로 얻는 것보다 많으며, 익스프레스 엔진의 일부 제한 사항입니다. 그 외에는 일반적인 SQL Server 데이터베이스 엔진 설치에 사용할 클래스와 언어 만 사용할 수 있습니다.

이 게시물이 귀하의 질문에 답변하지 못했다면, 자세히 설명해 주시고 귀하가 찾는 답변을 얻을 확률이 더 높습니다.

0

이것은 dataAdapter 클래스를 사용하여 수행 할 수 있습니다.

+0

SQL 문이 필요합니다. 데이터베이스의 모든 테이블을 원합니다. – Malfist

관련 문제