我正在开发一个应用程序,它从大量文本文件(~2.5 GB)读取行,将每行操作为特定格式,然后将每行写入文本文件.一旦输出文本文件关闭,程序"批量插入"(SQL Server)将数据存入我的数据库.它有效,它只是很慢.
我正在使用StreamReader和StreamWriter.
由于我必须操纵文本,我几乎一直在阅读一行.但是,我认为,如果我制作了一系列线条并且每1000行左右写出一个集合,那么它至少可以加快速度.问题是(这可能纯粹是出于我的无知),我不能写一个string[]使用StreamWriter.在探索StackOverflow和互联网的其余部分后,我遇到了File.WriteAllLines,它允许我写入string[]文件,但我不认为我的计算机的内存可以处理2.5 GB的数据一次存储.此外,文件已创建,填充和关闭,因此我必须制作大量较小的文件来分解2 GB文本文件,只是将它们插入数据库.所以我宁愿远离这个选择.
我能想到的一个黑客工作是制作一个StringBuilder并使用该AppendLine方法添加每一行来制作一个巨大的字符串.然后我可以将其转换StringBuilder为字符串并将其写入文件.
但足够我的推测.我已经实现的方法有效,但我想知道是否有人可以建议更好的方法将数据块写入文件?
我正在设计一个网站,用户在该网站上指定一个帐户ID(必须是8位数字),以便查找与该帐户关联的帐单日期.我使用了asp.net regex验证器来阻止用户输入字符.我还在此文本框中附加了一个必填字段验证器.
我已经阅读了其他stackoverflow问题的SQL注入攻击,但我没有遇到任何与使用验证器保护查询有关的事情.
设置这些验证器后,我有什么理由担心sql注入攻击吗?我还需要(或应该)做些什么来防止恶意用户滥用此用户输入.
这是我的SQL查询的C#代码,并使用与AccountID关联的帐单周期日期填充下拉列表:
string sqlCommandString = "SELECT StatementDate AS StateDate FROM dbTable " +
"WHERE AccountID = '" + AccountID + "' ORDER BY StatementDate DESC";
string ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
using (SqlCommand sqlCommand = new SqlCommand(sqlCommandString, sqlConnection))
{
sqlConnection.Open();
DropDownList_StatementDate.DataSource = sqlCommand.ExecuteReader();
DropDownList_StatementDate.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的正则表达式验证器:
<asp:RegularExpressionValidator
ID="RegExpVal_AccountID"
runat="server"
ErrorMessage="Must be 8 digits"
ValidationExpression="^\d{8}$"
ControlToValidate="TextBox_AccountID"
CssClass="ValidatorStyle"
Display="Dynamic">
</asp:RegularExpressionValidator>
Run Code Online (Sandbox Code Playgroud)
谢谢.