2017-03-03 55 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

你真的不需要循环。这将是使用表值参数的一点。 –