Самое важное, что вам нужно исправить, - это использовать параметры запроса, а не строить строку динамически. Это улучшит производительность, обслуживание и безопасность.
Кроме того, вы хотите использовать более новые строго типизированные объекты ADO.Net. Обязательно добавьте директивы using для System.Data.OleDb
.
Обратите внимание на операторы using
в этом коде. Они будут уверены , что ваше соединение закрыто, когда вы закончите с ним. Это важно, потому что соединения с базой данных являются ограниченным и неуправляемым ресурсом.
Наконец, вы на самом деле не используете массив в своем коде. Все, что вас действительно волнует, - это возможность перебирать набор слов, и поэтому вы хотите принять 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 важно убедиться, что вы добавляете их по порядку.
Обновление: Исправлено для работы на VS 2005 / .Net 2.0 (использовались функции VS 2008).