我正在尝试用C#完成一个项目,我想知道为什么这两个代码表现不同。
我正在尝试使用字符串中的值填充数据库。我的代码的第一个版本可以工作,但第二个版本没有。
foreach (var Line in Lines)
{
string[] SplittedLine = Line.Split(Spliter);
using (SqlCeConnection Connection = new SqlCeConnection(ConnectionString))
{
Connection.Open();
SqlCeCommand Command = new SqlCeCommand(
@"INSERT INTO Localitati(Nume) VALUES (@Nume)",
Connection);
Command.Parameters.AddWithValue(@"Nume", SplittedLine[0]);
Command.ExecuteNonQuery();
}
}
using (var Connection = new SqlCeConnection(ConnectionString))
{
Connection.Open();
foreach (var Line in Lines)
{
string[] SplittedLine = Line.Split(Spliter);
MessageBox.Show(SplittedLine[0]);
var Command = new SqlCeCommand(
@"INSERT INTO Localitati(Nume) VALUES (@Nume)",
Connection);
Command.Parameters.AddWithValue(@"Nume", SplittedLine[0]);
}
}
你在第二个版本中忘记了Command.ExecuteNonQuery();
。
因此,操作永远不会提交给数据库。
在循环中执行查询时,尽量使其尽可能短:将所有声明移出循环并保留参数aggignments和查询执行
码:
using (var Connection = new SqlCeConnection(ConnectionString)) {
Connection.Open();
string sql =
@"INSERT INTO Localitati(Nume)
VALUES (@Nume)";
using (SqlCeCommand Command = new SqlCeCommand(sql, Connection)) {
Command.Parameters.Add("@Nume", SqlDbType.VarChar); //TODO: provide RDBMS type here
foreach (var Line in Lines) {
// Assign parameter(s)...
Command.Parameters["@Nume"].Value = Line.Substring(0, Line.IndexOf(Spliter));
// ... and execute query
Command.ExecuteNonQuery();
}
}
}