2017-05-04 1 views
0

J'ai mis en œuvre une application Web et Windows qui a frappé une URL contenant le chemin d'accès au fichier csv. J'utilise WebClient pour télécharger le fichier, puis lire les données de .csv et écrire dans une table SQL Server.Importer CSV à partir de l'URL et stocker dans la table SQL Server sans télécharger le fichier

Existe-t-il un moyen de le faire sans télécharger/enregistrer le .csv et écrire la réponse .csv de l'URL dans la table SQL Server à l'aide d'une procédure stockée?

Ci-dessous un extrait de mon code C# fonctionnel.

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

Que ce soit possible ou non, du point de vue de la sécurité, j'éviterais toujours que la base de données communique directement avec Internet. –

+1

Merci pour les heads up! Je vais essayer d'écrire une API RESTFull qui obtiendra le httpResponse au format JSON/XML, puis écrire dans la table SQL Server. –

+0

En utilisant les méthodes 'HttpWebRequest' et' HttpWebResponse' j'étais capable de tirer des données à partir d'un fichier '.csv' présent sur l'URL et écrire dans une table SQL Server. –

Répondre

0

En utilisant HttpWebRequest et HttpWebResponse méthodes que j'ai pu extraire des données à partir d'un fichier présent sur .csv URL et écrire dans une table SQL Server.

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); 
     } 
    }