복붙노트

[SQL] C # DataTable을에 읽기 SQL 표

SQL

C # DataTable을에 읽기 SQL 표

나는 SQL 테이블에 DataTable의를 삽입하는 방법에 대한 글을 많이 읽었지만, .NET의 DataTable에 SQL 테이블을 풀 수있는 쉬운 방법은 무엇입니까?

해결법

  1. ==============================

    1.여기서, (이 그냥 의사입니다) 이것을 샷을 제공

    여기서, (이 그냥 의사입니다) 이것을 샷을 제공

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    
    public class PullDataTest
    {
        // your data table
        private DataTable dataTable = new DataTable();
    
        public PullDataTest()
        {
        }
    
        // your method to pull data from database to datatable   
        public void PullData()
        {
            string connString = @"your connection string here";
            string query = "select * from table";
    
            SqlConnection conn = new SqlConnection(connString);        
            SqlCommand cmd = new SqlCommand(query, conn);
            conn.Open();
    
            // create data adapter
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            // this will query your database and return the result to your datatable
            da.Fill(dataTable);
            conn.Close();
            da.Dispose();
        }
    }
    
  2. ==============================

    2.

    var table = new DataTable();    
    using (var da = new SqlDataAdapter("SELECT * FROM mytable", "connection string"))
    {      
        da.Fill(table);
    }
    
  3. ==============================

    3.많은 방법.

    많은 방법.

    사용 ADO.Net과 데이터 어댑터를 사용 채우기는 DataTable을 얻을 수 있습니다 :

    using (SqlDataAdapter dataAdapter
        = new SqlDataAdapter ("SELECT blah FROM blahblah ", sqlConn))
    {
        // create the DataSet 
        DataSet dataSet = new DataSet(); 
        // fill the DataSet using our DataAdapter 
        dataAdapter.Fill (dataSet);
    }
    

    그런 다음 데이터 세트에서 데이터 테이블을 얻을 수 있습니다.

    upvoted 응답 데이터 집합의 주 사용하지 않는, (그것은 내 대답 한 후 출연) 그렇습니다

    // create data adapter
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    // this will query your database and return the result to your datatable
    da.Fill(dataTable);
    

    어느 광산 바람직하다.

    난 강력하게 datatables 및 데이터 세트를 사용하는 것은 좋은 생각이 아니다하지만 ... 엔티티 프레임 워크를보고 추천 할 것입니다. 수단은 런타임에 수행 할 수 있습니다 디버깅 그들에 어떤 종류의 안전이 없습니다. 강력한 형식의 컬렉션으로 (당신이 LINQ2SQL 또는 엔티티 프레임 워크를 사용에서 얻을 수있는) 당신의 인생이 훨씬 쉬워 질 것입니다.

    편집 : 아마도 내가 분명하지 않다 : Datatables = 좋은 데이터 세트 = 악. 당신이 ADO.Net를 사용하는 경우 다음 이러한 기술을 모두 사용할 수 있습니다 (EF, linq2sql, 날씬한, ORM 월의 NHibernate에) 그들은 일반적으로 ado.net 위에 앉아. 당신이 얻는 이점은 당신이 당신의 스키마를 변경하면 코드 생성을 움직이기로 추상화의 적절한 수준을 제공까지 쉽게 모델을 업데이트 할 수 있습니다.

    예를 들어 - - 그것은 SQL 서버 공급자를 사용 기본적으로 예를 들어, 데이터베이스 유형의 정보를 드러내는 ado.net 어댑터가 사용하는 공급자는, 당신은 또한에 연결할 수 devart를 위해 Postgress 제공 여전히 유형의 정보에 접근 할 수있는 다음 것 (- 몇 가지 단점이 있습니다 거의 통증) - 위와 같이 사용 선택의 ORM 당신을 수 있도록 내가 MS는 오라클 제공자를 제공 믿습니다. 이 전체의 목적은 가능하면 데이터베이스 구현에서 추상적 인 거리에 있습니다.

  4. ==============================

    4.독립 버전 공급 업체, 단독으로 ADO.NET 인터페이스에 의존; 2 가지 방법 :

    독립 버전 공급 업체, 단독으로 ADO.NET 인터페이스에 의존; 2 가지 방법 :

    public DataTable Read1<T>(string query) where T : IDbConnection, new()
    {
        using (var conn = new T())
        {
            using (var cmd = conn.CreateCommand())
            {
                cmd.CommandText = query;
                cmd.Connection.ConnectionString = _connectionString;
                cmd.Connection.Open();
                var table = new DataTable();
                table.Load(cmd.ExecuteReader());
                return table;
            }
        }
    }
    
    public DataTable Read2<S, T>(string query) where S : IDbConnection, new() 
                                               where T : IDbDataAdapter, IDisposable, new()
    {
        using (var conn = new S())
        {
            using (var da = new T())
            {
                using (da.SelectCommand = conn.CreateCommand())
                {
                    da.SelectCommand.CommandText = query;
                    da.SelectCommand.Connection.ConnectionString = _connectionString;
                    DataSet ds = new DataSet(); //conn is opened by dataadapter
                    da.Fill(ds);
                    return ds.Tables[0];
                }
            }
        }
    }
    

    나는 몇 가지 성능 테스트, 두 번째 방법은 항상 첫 번째 상회했다.

    Stopwatch sw = Stopwatch.StartNew();
    DataTable dt = null;
    for (int i = 0; i < 100; i++)
    {
        dt = Read1<MySqlConnection>(query); // ~9800ms
        dt = Read2<MySqlConnection, MySqlDataAdapter>(query); // ~2300ms
    
        dt = Read1<SQLiteConnection>(query); // ~4000ms
        dt = Read2<SQLiteConnection, SQLiteDataAdapter>(query); // ~2000ms
    
        dt = Read1<SqlCeConnection>(query); // ~5700ms
        dt = Read2<SqlCeConnection, SqlCeDataAdapter>(query); // ~5700ms
    
        dt = Read1<SqlConnection>(query); // ~850ms
        dt = Read2<SqlConnection, SqlDataAdapter>(query); // ~600ms
    
        dt = Read1<VistaDBConnection>(query); // ~3900ms
        dt = Read2<VistaDBConnection, VistaDBDataAdapter>(query); // ~3700ms
    }
    sw.Stop();
    MessageBox.Show(sw.Elapsed.TotalMilliseconds.ToString());
    

    READ1 눈에 좋아 보이는,하지만 데이터 어댑터가 수행하는 더 나은 (안 혼동 한 DB는, 쿼리는 모두 달랐다 다른 상회 것을). 둘 사이의 차이는 있지만 쿼리에 의존. DataTables의 빠른 생성 - 그로드 될 수있는 이유는 채우기 그냥 위해 설계되었다 DataAdapters에있는 동안 행 (DataTable을에 자사의 방법)을 추가 할 때 여러 가지 제약이 문서에서 행에 의해 행을 확인해야합니다.

  5. ==============================

    5.중앙 집중식 모델 : 당신은 어디서든 사용할 수 있습니다!

    중앙 집중식 모델 : 당신은 어디서든 사용할 수 있습니다!

    당신은이 클래스에 함수에서 형식 아래 호출 할 필요가

    DataSet ds = new DataSet();
    SqlParameter[] p = new SqlParameter[1];
    string Query = "Describe Query Information/either sp, text or TableDirect";
    DbConnectionHelper dbh = new DbConnectionHelper ();
    ds = dbh. DBConnection("Here you use your Table Name", p , string Query, CommandType.StoredProcedure);
    

    이게 다예요. 그것은 완벽한 방법입니다.

    public class DbConnectionHelper {
       public DataSet DBConnection(string TableName, SqlParameter[] p, string Query, CommandType cmdText) {
        string connString = @ "your connection string here";
        //Object Declaration
        DataSet ds = new DataSet();
        SqlConnection con = new SqlConnection();
        SqlCommand cmd = new SqlCommand();
        SqlDataAdapter sda = new SqlDataAdapter();
        try {
         //Get Connection string and Make Connection
         con.ConnectionString = connString; //Get the Connection String
         if (con.State == ConnectionState.Closed) {
          con.Open(); //Connection Open
         }
         if (cmdText == CommandType.StoredProcedure) //Type : Stored Procedure
         {
          cmd.CommandType = CommandType.StoredProcedure;
          cmd.CommandText = Query;
          if (p.Length > 0) // If Any parameter is there means, we need to add.
          {
           for (int i = 0; i < p.Length; i++) {
            cmd.Parameters.Add(p[i]);
           }
          }
         }
         if (cmdText == CommandType.Text) // Type : Text
         {
          cmd.CommandType = CommandType.Text;
          cmd.CommandText = Query;
         }
         if (cmdText == CommandType.TableDirect) //Type: Table Direct
         {
          cmd.CommandType = CommandType.Text;
          cmd.CommandText = Query;
         }
         cmd.Connection = con; //Get Connection in Command
         sda.SelectCommand = cmd; // Select Command From Command to SqlDataAdaptor
         sda.Fill(ds, TableName); // Execute Query and Get Result into DataSet
         con.Close(); //Connection Close
        } catch (Exception ex) {
    
         throw ex; //Here you need to handle Exception
        }
        return ds;
       }
      }
    
  6. from https://stackoverflow.com/questions/6073382/read-sql-table-into-c-sharp-datatable by cc-by-sa and MIT license