2014-12-12 3 views
-4

Я использую MySQL с C#, но у меня проблемы. Почему этот код не работает?MySQL с проблемами C#

MySqlCommand cmd = new MySqlCommand("myConnectionString"); 

MySqlParameter lastId = new MySqlParameter(); 
lastId.ParameterName = "@LastID"; 
lastId.Value = 0; 
lastId.Direction = System.Data.ParameterDirection.Output; 


this.Command.Parameters.Add(lastId); 
this.Command.CommandText = "SET @LastID = LAST_INSERT_ID();"; 

// You have an error in your SQL syntax; check the manual that 
// corresponds to your MySQL server version for the right syntax 
// to use near '0 = LAST_INSERT_ID()' 
this.Command.ExecuteNonQuery(); 
+0

Как насчет вы рассказать нам, почему? Что не работает? Какие ошибки вы получаете? Что вы пытались решить проблему? –

+0

Во-первых, @LastID - это параметр, который вы передаете, но вы пытаетесь установить его как переменную. Как и ошибка, вы пытаетесь присвоить значение LAST_INSERT_ID() другому значению 0. –

+0

Что делать с '' LAST_INSERT_ID() 'и' var lastId = Command.ExecuteScalar(); '. Нет необходимости в параметре out? – juharr

ответ

2

Этот код является просто неправильным по многим причинам.

  • Во-первых, объект MySqlCommand должен быть связан с открытым соединение и нигде в коде не существует соединение создано, открыт и связан с командой
  • Во-вторых, текст команды для извлечения LAST_INSERT_ID is SELECT LAST_INSERT_ID(), нет необходимости иметь выходной параметр для этого, но самое главное, в вашем коде нет команды вставки, для которой вы хотите получить значение LAST_INSERT_ID.
  • В-третьих, вы не используете ExecuteNonQuery читать обратно значения, в вашем случае вы могли бы использовать ExecuteScalar

Так

using(MySqlConnection con = new MySqlConnection("myConnectionString")) 
using(MySqlCommand cmd = con.CreateCommand()); 
{ 
    con.Open(); 

    // BUILD an unique string with the INSERT INTO 
    // followed by the SELECT (with semicolon to divide) 
    string sqlInsertText = @"INSERT INTO yourTable (field1, FieldX) VALUES (value1, ValueX); 
          SELECT LAST_INSERT_ID();"; 
    cmd.CommandText = sqlInsertText; 

    // ExecuteScalar will execute the text of the command and returns the first column of the 
    // first row retrieved by the last statement executed 
    // (in this case the result of SELECT LAST_INSERT_ID() 
    object result = cmd.ExecuteScalar(); 
    if(result != null) 
    { 

     int lastID = Convert.ToInt32(result); 
     ..... 
    } 
} 
+0

Большое спасибо. Вы мне очень помогли! – sp7

Смежные вопросы