我正在尝试用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]);
}
}
答案 0 :(得分:7)
您在第二个变量中忘记了Command.ExecuteNonQuery();
。
因此,该操作永远不会提交到数据库。
答案 1 :(得分:0)
在循环中执行查询时,请尝试使其尽可能短:将所有声明移出循环,并保留参数聚集和查询执行
代码:
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();
}
}
}