[
  {
    "Id": "731444",
    "ThreadId": "287576",
    "Html": "\r\n<p>Hi, &nbsp; I want to download a zip file that contains roughly 25k records times 8 column of text, unzip it to a stream and insert the data into a MS SQL Server 2008 database table. &nbsp;I also want to do this every 4 hours. &nbsp;I've created SSIS packages\r\n that do exactly this, and scheduled them using a SQL Server Job. &nbsp;For this task, I need to do everything on a shared Windows webserver. &nbsp;I believe (hope) this can be done with ASP.net and C#.</p>\r\n<p>I'm thinking that I can use the following solutions:</p>\r\n<p>1) to launch my process every 4 hours: &nbsp;http://www.codeproject.com/Articles/12117/Simulate-a-Windows-Service-using-ASP-NET-to-run-sc</p>\r\n<p>2) to download my .zip file from the ftp server: &nbsp;http://aspalliance.com/1187_Building_a_Simple_FTP_Application_Using_C_20.3</p>\r\n<p>3) to unzip the file to a stream: &nbsp;DotNetZip</p>\r\n<p>4) to save the data to a sql server db: &nbsp;</p>\r\n<pre><span>private</span><span> </span><span>void</span><span> saveStreamToDB</span><span>(StreamReader sr</span><span>)</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; </span><span>{</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>SqlConnection</span><span> con </span><span>=</span><span> </span><span>new</span><span> </span><span>SqlConnection(connString</span><span>);</span><span><br></span><span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>string</span><span> line </span><span>=</span><span> sr</span><span>.</span><span>ReadLine</span><span>();</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>string</span><span>[]</span><span> value </span><span>=</span><span> line</span><span>.</span><span>Split</span><span>(</span><span class=\"str\">','</span><span>);</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>DataTable</span><span> dt </span><span>=</span><span> </span><span>new</span><span> </span><span>DataTable</span><span>();</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>DataRow</span><span> row</span><span>;</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>foreach</span><span> </span><span>(</span><span>string</span><span> dc </span><span>in</span><span> value</span><span>)</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>{</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dt</span><span>.</span><span>Columns</span><span>.</span><span>Add</span><span>(</span><span>new</span><span> </span><span>DataColumn</span><span>(</span><span>dc</span><span>));</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>}</span><span><br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>while</span><span> </span><span>(</span><span> </span><span>!</span><span>sr</span><span>.</span><span>EndOfStream</span><span> </span><span>)</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>{</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value </span><span>=</span><span> sr</span><span>.</span><span>ReadLine</span><span>().</span><span>Split</span><span>(</span><span class=\"str\">','</span><span>);</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>if</span><span>(</span><span>value</span><span>.</span><span>Length</span><span> </span><span>==</span><span> dt</span><span>.</span><span>Columns</span><span>.</span><span>Count</span><span>)</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>{</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row </span><span>=</span><span> dt</span><span>.</span><span>NewRow</span><span>();</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row</span><span>.</span><span>ItemArray</span><span> </span><span>=</span><span> value</span><span>;</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dt</span><span>.</span><span>Rows</span><span>.</span><span>Add</span><span>(</span><span>row</span><span>);</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>}</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>}</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span>SqlBulkCopy</span><span> bc </span><span>=</span><span> </span><span>new</span><span> </span><span>SqlBulkCopy</span><span>(</span><span>con</span><span>.</span><span>ConnectionString</span><span>,</span><span> </span><span>SqlBulkCopyOptions</span><span>.</span><span>TableLock</span><span>);</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bc</span><span>.</span><span>DestinationTableName</span><span> </span><span>=</span><span> </span><span class=\"str\">&quot;tblparam_test&quot;</span><span>;</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bc</span><span>.</span><span>BatchSize</span><span> </span><span>=</span><span> dt</span><span>.</span><span>Rows</span><span>.</span><span>Count</span><span>;</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; con</span><span>.</span><span>Open</span><span>();</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bc</span><span>.</span><span>WriteToServer</span><span>(</span><span>dt</span><span>);</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bc</span><span>.</span><span>Close</span><span>();</span><span><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; con</span><span>.</span><span>Close</span><span>();</span><span> <br>&nbsp; &nbsp; &nbsp; &nbsp; </span><span>}</span></pre>\r\n<p>&nbsp;</p>\r\n<p>I'm wondering if this entire solution is feasible. &nbsp;I'm also wondering if there's a better solution, other than SSIS. &nbsp;I can't use SSIS because I don't have a dedicated server available for this, and I have limited financial resources.</p>\r\n<p>Does anyone see major flaws with this solution?</p>\r\n<p>Any and all suggestions are most welcome.</p>\r\n<p>Thanks in advance,</p>\r\n<p>Joe</p>\r\n",
    "PostedDate": "2012-01-26T22:00:45.703-08:00",
    "UserRole": null,
    "MarkedAsAnswerDate": null
  }
]