您需要修复的最重要的事情是使用查询参数而不是动态构建字符串。这将提高性能、维护和安全性。
此外,您希望使用较新的强类型 ADO.Net 对象。确保添加 using 指令System.Data.OleDb
.
注意using
这段代码中的语句。他们将使sure当您完成连接后,您的连接将关闭。这很重要,因为数据库连接是有限且不受管理的资源。
最后,您并没有真正在代码中使用数组。您真正关心的是迭代单词集合的能力,因此您想要接受IEnumerable<string>
而不是数组。不用担心:如果您需要传递一个数组,该函数将接受一个数组作为参数。
public void AddToDatabase(IEnumerable<string> Words, int Good, int Bad, int Remove)
{
string sql = "INSERT INTO WordDef (Word, Good, Bad, Remove) VALUES (@Word, @Good, @Bad, @Remove)";
using (OleDbConnection cn = new OleDbConnection("connection string here") )
using (OleDbCommand cmd = new OleDbCommand(sql, cn))
{
cmd.Parameters.Add("@Word", OleDbType.VarChar);
cmd.Parameters.Add("@Good", OleDbType.Integer).Value = Good;
cmd.Parameters.Add("@Bad", OleDbType.Integer).Value = Bad;
cmd.Parameters.Add("@Remove", OleDbType.Integer.Value = Remove;
cn.Open();
foreach (string word in Words)
{
cmd.Parameters[0].Value = word;
cmd.ExecuteNonQuery();
}
}
}
另一件事:在 OleDb 中使用查询参数时,确保按顺序添加它们非常重要。
Update:已修复以在 VS 2005 / .Net 2.0 上运行(依赖于 VS 2008 功能)。