3 Stimmen

MySql "SET @variable" wirft fatalen Fehler in C#-Code

Ich erhalte einen schwerwiegenden Fehler bei der Verwendung einer ExecuteNonQuery(). Ich bin neu in der Arbeit mit Sql und als solche im nicht sicher, warum diese SET Befehl ein Problem verursacht.

Ich verwende MySql 5.5.17, und ich verwende C# .Net Framework 3.5 in der VS2010 IDE.

Exception Message = Schwerwiegender Fehler bei der Befehlsausführung. Die Fehlerzeile = SET @oldguid = 250006;

Der Inhalt der Sql-Datei, die ich verwende, sieht wie folgt aus, ohne die "Kommentare", die ich entfernt habe:

DELETE FROM `disables` WHERE `sourceType`=0 AND `entry`=61904;
INSERT INTO `disables` (`sourceType`, `entry`, `flags`, `comment`) VALUES(0, 61904, 8, 'Magma Totem TEST - can crash client by spawning too many totems');
SET @oldguid = 250006;
SET @newguid = 202602;
UPDATE `creature` SET `guid`=@newguid WHERE `guid`=@oldguid;
UPDATE `creature_addon` SET `guid`=@newguid, `path_id`=@newguid*100 WHERE `guid`=@oldguid;
UPDATE `waypoint_data` SET `id`=@newguid*100 WHERE `id`=@oldguid*100;
UPDATE `areatrigger_teleport` SET `target_orientation`=2.255664 WHERE `id`=4386;
UPDATE `gameobject` SET `spawnMask`=3 WHERE `guid`=22674;

die guid Spalte ist ein unsigned int(10)

Der C#-Code, mit dem ich diese .sql-Datei verarbeite, lautet wie folgt:

filename = lstBox_SqlFiles.SelectedItem.ToString();
mysql = new MySqlConnection(connection + Database);
string line;

OpenDatabase();
using (StreamReader reader = new StreamReader(filename))
{
  StringBuilder parsedLine = new StringBuilder();
  int count = 0;
  while ((line = reader.ReadLine()) != null)
  {
    if (line.Length > 0 && !line.StartsWith("--"))
    {
      if (line.EndsWith(";"))
      {
        if (parsedLine.Length > 0)
          line = parsedLine.ToString() + line;
        try
        {
          count++;
          lbl_LineQuery.Text = line;
          lbl_QueryCount.Text = String.Format("Count: {0}", count);

          MySqlCommand cmd = new MySqlCommand(line, mysql);
          cmd.ExecuteNonQuery();
        }
        catch (MySqlException ex)
        {
          string msg = String.Format("Source FileName: SqlUpdater.cs\nSql FileName: {0}\nError Line: {1}\nException Message: {2}\n", filename, line, ex.Message);
          MessageBox.Show("cmd.ExecuteNonQuery() Error!\n" + msg, "MySql Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
          return;
        }
        sbClear(parsedLine);
      }
      else
      {
        parsedLine.Append(line);
        continue;
      }
    }
    else
    continue;
  }
}

Kann jemand ein Problem mit meinem Code erkennen? Muss ich die Zeichenkette "SET @var" besonders manipulieren?

Jede Hilfe ist willkommen Vielen Dank im Voraus

Straßenmeisterei

  • Bearbeiten * als Randbemerkung sollte ich darauf hinweisen, dass, wenn ich ein Sql-Management-Programm wie SQLYog verwenden es die gleiche Sql-Datei ohne Problem verarbeitet, so im der Annahme, dass das Problem irgendwo in der Manipulation der Zeichenfolge in meinem C#-Code ist.

1voto

Андрей Punkte 21

Schrieb Prozeduren, die Variablen enthalten (@ name_var). Es wurde eine Ausnahme ausgelöst. Hilfe bei der Änderung der Klasse MySqlCommand Klasse MySqlScript

-1voto

김민석 Punkte 1

Add connection string ; Allow User Variables=True

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X