[SQL] C #에서 SQL을 대량 복사 / 삽입
SQLC #에서 SQL을 대량 복사 / 삽입
내가 JSON과 SqlBulkCopy의 새로운 오전. 내가 JSON 내가 C # .NET을 사용하여 Microsoft SQL에서 대량 복사 / 삽입 할 것을 POST 데이터를 포맷해야합니다.
JSON 형식 :
{
"URLs": [{
"url_name": "Google",
"url_address": "http://www.google.com/"
},
{
"url_name": "Yahoo",
"url_address": "http://www.yahoo.com/"
},
{
"url_name": "FB",
"url_address": "http://www.fb.com/"
},
{
"url_name": "MegaSearches",
"url_address": "http://www.megasearches.com/"
}]
}
클래스:
public class UrlData
{
public List<Url> URLs {get;set;}
}
public class Url
{
public string url_address {get;set;}
public string url_name {get;set;}
}
어떻게 효율적으로 그렇게 할 수 있습니까?
해결법
-
==============================
1.당신이 SqlBulkCopy의를 사용할 필요는 분명히 없다 10 ~ 50 URL의로드해야하기 때문에 - 그것은 삽입의 수천입니다. 당신은이 작업을 여러 번 반복하는 데 필요한 것입니다 경우를 제외하고.
당신이 SqlBulkCopy의를 사용할 필요는 분명히 없다 10 ~ 50 URL의로드해야하기 때문에 - 그것은 삽입의 수천입니다. 당신은이 작업을 여러 번 반복하는 데 필요한 것입니다 경우를 제외하고.
그래서, 당신은 URL 목록이있는 경우, 즉 목록, 데이터베이스에 그럼 그냥 목록에서 모든 URL을 반복하고 삽입, 예를 들어,
string insertQuery = "insert into TUrls(address, name) values(@address, @name)"; foreach (URL url in listOfUrls) { SqlCommand cmd = new SqlCommand(insertQuery); cmd.Parameters.AddWithValue("@name", url.url_name); cmd.Parameters.AddWithValue("@address", url.urld_address); // don't forget to take care of connection - I omit this part for clearness cmd.ExecuteNonQuery(); }
당신이 정말로 SqlBulkCopy의를 사용해야한다면 당신은 DataTable의에 클래스 URL의 개체를 변환해야합니다. 마크 Gravell의 대답에 표정이 작업을 수행하려면 :
그래서 당신은
목록에서의 DataTable을 만들 마크의 솔루션 중 하나를 사용할 수 있습니다. 그럼 그냥 서버에서 대상 테이블에 테이블을 작성해야합니다 : string csDestination = "put here connection string to database"; using (SqlConnection destinationConnection = new SqlConnection(csDestination)) using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection)) { bulkCopy.DestinationTableName = "TUrls"; bulkCopy.WriteToServer(dataTableOfUrls); }
희망이 도움이.
UPD
대량 복사가 아니라 단지 명령을 삽입 작동하지만, 모두의 약간의 다른를 않기 때문에, 당신이 할 수 물론. 내가 잘못 갈 높은 확률을 가지고 경우 작업에서 중간 테이블을 사용하도록 권하고 싶습니다 (당신은 가능한 한 짧은 시간으로 목적지 테이블 바쁜하려는)하거나 일부 데이터 변환을 할 필요가 있지만,의 필요성을 느낄 경우에만 그것.
-
==============================
2.코드 아래에이를 사용하여 DataTable을에 목록
을 변환 할 수 있습니다 : - 코드 아래에이를 사용하여 DataTable을에 목록
을 변환 할 수 있습니다 : - List<YourClass> objlist = alldata; string json = Newtonsoft.Json.JsonConvert.SerializeObject(objlist); DataTable dt = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(json); SaveDataInTables(dt, "Table_Name_Of_SQL");
여기, 내가 ALLDATA 목록
개체를 포함 있으리라 믿고있어 당신도 할 수있는 - objlist.Add (objYourClass를) 다음 SaveDataInTables 방법에 sql_TableName 및 데이터 테이블을 전달합니다. 이 방법은 SQL_Table의 모든 데이터를 삽입합니다. public void SaveDataInTables(DataTable dataTable, string tablename) { if (dataTable.Rows.Count > 0) { using (SqlConnection con = new SqlConnection("Your_ConnectionString")) { using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) { sqlBulkCopy.DestinationTableName = tablename; con.Open(); sqlBulkCopy.WriteToServer(dataTable); con.Close(); } } } }
희망은,이 코드는 당신을 도와!
-
==============================
3.당신은 테이블 반환 매개 변수를 사용해야합니다. 당신이> SQL 서버 2005을 사용하는 경우에는 여기에 예를 가질 수 있습니다
당신은 테이블 반환 매개 변수를 사용해야합니다. 당신이> SQL 서버 2005을 사용하는 경우에는 여기에 예를 가질 수 있습니다
-
==============================
4.그것의 유일한 10 ~ 50 URL이, 자주 삽입되는 경우에, 당신은 문 삽입 해고 할 수 있습니다. 간단하고 덜 번거 로움 당신은 날씬한처럼 쉽고 빠르게 무언가를 사용할 수 있습니다.
그것의 유일한 10 ~ 50 URL이, 자주 삽입되는 경우에, 당신은 문 삽입 해고 할 수 있습니다. 간단하고 덜 번거 로움 당신은 날씬한처럼 쉽고 빠르게 무언가를 사용할 수 있습니다.
당신이 대량 복사를 원하는 다른 경우, 작성하고 먼저 JSON에서 ADO.NET의 데이터 테이블을 채우기 위해 필요 - 가급적 대상 SQL 테이블의 스키마와 일치. 그것은 당신의 선택입니다.
-
==============================
5.
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = "dbo.LogData"; try { // Write from the source to the destination. connection.Open(); bulkCopy.WriteToServer(dataTable1); connection.Close(); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
-
==============================
6.난 당신이 사용중인 데이터베이스 모른다. 하지만 포스트 그레스 경험을 가지고 있고 나는이 다른 관계형 데이터베이스에서 유사하다 가정 :
난 당신이 사용중인 데이터베이스 모른다. 하지만 포스트 그레스 경험을 가지고 있고 나는이 다른 관계형 데이터베이스에서 유사하다 가정 :
데이터베이스에서 당신은 CSV로 구분 된 값 (e.g.Postgres)에서도 복사 할 수 있습니다. 당신이 expeted 입력 형식에 따라 문자열을 포맷하면이 가장 빠른 방법이 될 것이다.
from https://stackoverflow.com/questions/18841000/sql-bulk-copy-insert-in-c-sharp by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL : 마 당신은 많은-많은 테이블의 자동 증가 기본 키를해야합니까? (0) | 2020.07.05 |
---|---|
[SQL] 기본 키가없는 경우 중복 레코드가 SqlBulkCopy의 삽입되지 않도록하는 방법 (0) | 2020.07.05 |
[SQL] 모든 칼럼에 null 값 (들)의 모든 행을 찾기 (0) | 2020.07.05 |
[SQL] 업데이트 트리거 후 SQL 서버 (0) | 2020.07.05 |
[SQL] PostgreSQL의 SERIAL 작업 다르게합니까? (0) | 2020.07.05 |