我试图在同一个连接中运行多个SqlCommand,但由于某种原因,程序将在第二个停止
command.ExecuteNonQuery();
这是我的代码:
string queryString = "SELECT DISTINCT Titre from infosHoraire where Salle='DOO';" +
"SELECT DISTINCT Titre from infosHoraire where Salle='FOO' and Jour <='" + finDate + "';" +
"SELECT DISTINCT Titre from infosHoraire where Salle='GOO' and Jour <='" + finDate + "';";
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConsoleXMLtoDB"].ConnectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
// on remplit le dico
while (reader.Read())
{
MoviesList.Add(reader[0].ToString(), "0");
searchCode(reader[0].ToString(), MoviesList);
//Console.WriteLine(" On rajoute le code {0}", MoviesList[reader[0].ToString()]);
}
reader.NextResult();
while (reader.Read())
{
if (!MoviesList.ContainsKey(reader[0].ToString()))
{
MoviesList.Add(reader[0].ToString(), "0");
searchCode(reader[0].ToString(), MoviesList);
}
}
reader.NextResult();
while (reader.Read())
{
if (!MoviesList.ContainsKey(reader[0].ToString()))
{
MoviesList.Add(reader[0].ToString(), "0");
}
}
foreach (string key in MoviesList.Keys)
{
Console.WriteLine("MoviesList {0}, code {1} .", key, MoviesList[key]);
// RAJOUTER DONNEES HORAIRES
command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";
//cmd.Parameters.AddWithValue("@code", MoviesList[key]);
IT STOPS HERE.
command.ExecuteNonQuery();
}
}
catch (Exception)
{
//Console.WriteLine("{0} Exception caught.", e);
}
finally
{
// Always call Close when done reading.
reader.Close();
connection.Close();
}
}
MoviesList是
Dictionary<string, string>
我无法真正找到问题的来源。
如果删除它,它将正常工作:
foreach (string key in MoviesList.Keys)
{
//literaltest.Text += "<br/> dictionnaire " + key + "," + MoviesList[key];
Console.WriteLine("MoviesList {0}, code {1} .", key, MoviesList[key]);
// RAJOUTER DONNEES HORAIRES
command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";
//cmd.Parameters.AddWithValue("@code", MoviesList[key]);
command.ExecuteNonQuery();
}
答案 0 :(得分:2)
编辑:尝试在捕获器上放置一个断点,看看是否有错误。
catch (Exception e)
{
//Console.WriteLine("{0} Exception caught.", e);
}
将鼠标悬停在e上,您应该能够看到错误消息。然后粘贴在这里。它可能是您的查询导致问题而不是命令对象
编辑。 reader对象仍在运行,这限制了您再次使用命令对象。在尝试执行下一个命令之前先关闭阅读器
reader.Close();
答案 1 :(得分:1)
从以下where
查询中删除insert
条件
command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";
答案 2 :(得分:1)
您用于读取记录的SQLDataReader仍处于打开状态并使用该连接。在同一连接上执行另一个命令之前,需要关闭该读取器。 e.g。
reader.Close();
foreach (string key in MoviesList.Keys)
{
Console.WriteLine("MoviesList {0}, code {1} .", key, MoviesList[key]);
// RAJOUTER DONNEES HORAIRES
command.CommandText = "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "') where Titre = '" + key + "'";
//cmd.Parameters.AddWithValue("@code", MoviesList[key]);
IT STOPS HERE.
command.ExecuteNonQuery();
}
答案 3 :(得分:0)
INSERT语句的SQL语法错误。你只需要这个
querystring= "INSERT INTO infosHoraire (Code) VALUES ('" + MoviesList[key] + "')";
答案 4 :(得分:0)
SqlCommand(命令)仍然很忙 - 你不能将它重用于insert语句。您需要使用新的SqlCommand打开一个新的SqlConnection。虽然如果你只是使用块将foreach移到原始查询之外,它可能会更清晰,因为你只是在那时引用了内存字典。
如上所述,你的insert语句也有一个没有意义的where子句......你是否意味着要成为一个更新语句?
删除空的捕获,你会看到一些异常消息,这将使你的生活更轻松。
答案 5 :(得分:0)
//编辑你的select语句试试这个
SELECT DISTINCT Titre from infosHoraire where Salle in ('DOO','FOO','GOO') and Jour <='" + finDate + "'";