2017-03-03 80 views
0

Soooooooo ...我有一個SQL Server表,我需要從我導入的csv文件的內容進行更新。實質上,如果我有一個記錄的鍵與單元格A的內容匹配,我將用單元格B的內容更新該記錄的一個字段。從我在其他地方找到的一些片段看來,我似乎需要創建一個臨時表格,做如下:從CSV文件更新SQL Server表?

 protected void UploadBtn_Click(object sender, EventArgs e) 
     { 
      string csvPath = Server.MapPath("~/Uploads/") + Path.GetFileName(RadAsyncUpload1.UploadedFiles[0].FileName); 
      DataTable dt = new DataTable(); 
      dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Customer Ref", typeof(string)), 
            new DataColumn("Inventory #", typeof(string)), 
           }); 


      string csvData = File.ReadAllText(csvPath); 
      foreach (string row in csvData.Split('\n')) 
      { 
       if (!string.IsNullOrEmpty(row)) 
       { 
        dt.Rows.Add(); 
        int i = 0; 
        foreach (string cell in row.Split(',')) 
        { 
         dt.Rows[dt.Rows.Count - 1][i] = cell; 
         i++; 
        } 
       } 
      } 
     } 



    } 
} 

但我很好難倒到哪兒何去何從......

任何意見/建議/指針將不勝感激!

感謝一如既往,

保羅

+0

我不認爲這是一種將數據插入到SQL服務器的真正高效的方法......如果您只需要將數據插入到CSV表中,您是否嘗試過OPENROWSET?然後,您可以將邏輯放入SP並從代碼運行。 – asemprini87

+0

@ asemprini87不知道我是否正確理解你......我沒有插入數據,只做了更新。 – PaulBinCT2

+0

這聽起來像一個表值參數將是最簡單的解決方案。你可以用你需要的兩列創建一個用戶定義的表類型。然後你用這些值加載一個DataTable。最後但並非最不重要的是,您創建一個存儲過程來接收這些數據並執行更新。從程序內部,您可以像處理任何其他表一樣處理參數。 –

回答

0

因此,在你的示例代碼,您已經創建了內存DataTable(你的程序,而不是在SQL Server),您的CSV文件的內容。這並沒有爲你的目標向你購買任何東西。

您需要將數據上傳到SQL Server中的臨時表中,然後執行將臨時表連接到您的實時數據的UPDATE語句。

在某種程度上,您需要連接到SQL服務器,並執行命令來創建臨時表,在循環中執行命令以將記錄上載到該臨時表,使用update語句執行命令以及最後是放棄臨時表的命令。

+0

因此,我無法循環查看數據表以查看是否有匹配的記錄,只需更新我的記錄? – PaulBinCT2

+0

你真的不需要循環。這將是使用表值參數的一點。 –