【发布时间】:2018-12-04 12:44:13
【问题描述】:
以下代码使用文本文件作为本地 SQL 数据库的输入,就像文本文件是一个表一样。但这里的问题是它是错误的,因为使用SQLEXecute 根本不解析数据。这意味着即使我们使用实际文本也不会创建表格。
public void ParseRoutingFile()
{
using (StreamReader sr = new StreamReader(Engine.LIST_FILE_PATH + @"\ROUTING.TXT", Encoding.Default))
{
while (sr.Peek() >= 0)
{
string row = sr.ReadLine();
if (row != null)
{
string[] parts = row.Split(';');
if (parts.Length > 0)
{
// find records for the specific terminal
if (parts[0] == Engine.TerminalId)
{
string query = string.Format("INSERT INTO Routing (RId, Weeknum, Year, Days) " +
"VALUES ('{0}','{1}','{2}','{3}')",
parts[4].Trim(),
parts[1].Trim(),
parts[2].Trim(),
parts[3]
);
Engine.SqlExecute(query);
}
else continue;
}
}
}
}
}
此时我只想阅读文件,不怕摔倒。
现在,对于用户来说,表格应该是这样的
<style type="text/css">
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top}
</style>
<table class="tg">
<tr>
<th class="tg-0pky"></th>
<th class="tg-0pky">RID</th>
<th class="tg-0pky">Weeknum</th>
<th class="tg-0pky">Year</th>
<th class="tg-0pky">Days</th>
</tr>
<tr>
<td class="tg-0pky">□</td>
<td class="tg-0pky">11</td>
<td class="tg-0pky">45</td>
<td class="tg-0pky">2019</td>
<td class="tg-0pky">4</td>
</tr>
</table>
【问题讨论】:
-
如果我向您发送的文件在任何列中都包含
'); DROP TABLE Routing; --,那么您将有一个非常糟糕的一天。 -
@vzwick 这就是我在这里发帖的原因,因为我不知道更好的写法
-
stackoverflow.com/questions/21709305/… - 注意
command.Parameters.AddWithValue(...;) -
@vzwick 所以这行不通? stackoverflow.com/questions/34691471/parse-object-from-sql 因为我想解析我的数据
-
它有效。它只是超级不安全,并且将成为绝对的维护噩梦。我当然建议您研究 ORM,例如 Entity Framework(非常强大,但需要一段时间才能掌握)或 Dapper(可能更适合您的用例)。