[SQL] C # DataTable을에 읽기 SQL 표
SQLC # DataTable을에 읽기 SQL 표
나는 SQL 테이블에 DataTable의를 삽입하는 방법에 대한 글을 많이 읽었지만, .NET의 DataTable에 SQL 테이블을 풀 수있는 쉬운 방법은 무엇입니까?
해결법
-
==============================
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.
var table = new DataTable(); using (var da = new SqlDataAdapter("SELECT * FROM mytable", "connection string")) { da.Fill(table); }
-
==============================
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.독립 버전 공급 업체, 단독으로 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.중앙 집중식 모델 : 당신은 어디서든 사용할 수 있습니다!
중앙 집중식 모델 : 당신은 어디서든 사용할 수 있습니다!
당신은이 클래스에 함수에서 형식 아래 호출 할 필요가
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; } }
from https://stackoverflow.com/questions/6073382/read-sql-table-into-c-sharp-datatable by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 그것은 PL / SQL 블록에서 SELECT 문은 출력 할 수 있습니까? (0) | 2020.03.28 |
---|---|
[SQL] 웅변 / 유창한를 사용하여 단일 쿼리에서 여러 행을 삽입하는 방법 (0) | 2020.03.28 |
[SQL] SQL Server의 커버 인덱스 및 대상 쿼리는 무엇입니까? (0) | 2020.03.28 |
[SQL] 가장 빠른 방법은 SQL Server에서 VARCHAR에서 숫자가 아닌 문자를 제거합니다 (0) | 2020.03.28 |
[SQL] 그것은 어떤 깊이로, 하나의 쿼리에서 MySQL은 트리 구조의 테이블을 쿼리 할 수 있습니까? (0) | 2020.03.28 |