2017-05-04 1 views
0

CSV 파일에 대한 경로가 포함 된 URL을 누르는 웹 및 Windows 응용 프로그램을 구현했습니다. WebClient을 사용하여 파일을 다운로드 한 다음 .csv에서 데이터를 읽고 SQL Server 테이블에 기록합니다.URL에서 CSV를 가져 와서 파일을 다운로드하지 않고 SQL Server 테이블에 저장하십시오.

.csv을 다운로드/저장하지 않고 저장 프로 시저를 사용하여 URL의 .csv을 SQL Server 테이블에 쓰는 방법이 있습니까?

다음은 작동하는 C# 코드의 일부입니다.

URL_VALUE = "http://test.url.com/table.csv?test.csv"; 
string csvPath = "~C:\\SaveFile\\test.csv"; 

WebClient client = new WebClient(); 
client.DownloadFile(@URL_VALUE, csvPath); 

writeToSQL(csvPath, Symbol); 

// Code snippet for SQL Write operation 
public void writeToSQL(string url, string filepath) 
{ 
    using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection)) 
    { 
     // Set the database table name 
     sqlBulkCopy.DestinationTableName = "dbo.csv_PopulateData"; 

     sqlBulkCopy.ColumnMappings.Add("Col1", "Val1"); 
     sqlBulkCopy.ColumnMappings.Add("Col2", "Val2"); 
     sqlBulkCopy.ColumnMappings.Add("Col3", "Val3"); 

     sqlBulkCopy.WriteToServer(table); 
    } 
} 
+1

보안의 관점에서 볼 때, 저는 항상 데이터베이스가 인터넷에 직접 통신하는 것을 피할 것입니다. –

+1

머리를 주셔서 감사합니다! JSON/XML 형식으로 httpResponse를 가져 와서 SQL Server Table에 쓰는 RESTFull API를 작성해 보겠습니다. –

+0

'HttpWebRequest'와'HttpWebResponse' 메소드를 사용하여 URL에있는'.csv' 파일에서 데이터를 가져 와서 SQL Server 테이블에 쓸 수있었습니다. –

답변

0

내가 URL에 .csv 파일 존재에서 데이터를 끌어와 SQL Server 테이블로 쓸 수 있었다 HttpWebRequestHttpWebResponse 방법을 사용.

public void getFileData() 
    { 
     try 
     { 

      Uri CSVUri = new Uri("URL"); 
      WebRequest = (HttpWebRequest)HttpWebRequest.Create(CSVUri); 
      webResponse = (HttpWebResponse)WebRequest.GetResponse(); 
      if (webResponse.StatusCode == HttpStatusCode.OK) 
      { 
       System.IO.StreamReader strReader = new System.IO.StreamReader(WebRequest.GetResponse().GetResponseStream()); 
       //create datatable with column names (Headers) 
       Createtable(strReader.ReadLine()); 
       String SingleLine; 
       while ((SingleLine = strReader.ReadLine()) != null) 
       { 
        AddRowtable(SingleLine); //Add data into dataset 
       } 

       GridView1.DataSource = datatable1; 

       using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) 
       { 
        foreach (DataColumn c in datatable1.Columns) 
        bulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName); 

        bulkCopy.DestinationTableName = "dbo.tableName"; 
        try 
        { 
         bulkCopy.WriteToServer(datatable1); 
        } 
        catch (Exception ex) 
        { 
         string display = "Exception Occured"; 
         ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + display + "');", true); 
        } 
       } 

       if (strReader != null) strReader.Close(); 
      } 
     } 
     catch (System.Net.WebException ex) 
     { 
      string display = "Exception Occured"; 
      ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('" + display + "');", true); 
     } 
    } 
관련 문제