2012-05-18 3 views
0

У меня есть следующий код в Mono, используя MySQL Connector/Net:Почему мой MySqlCommand не обновляет мою таблицу?

try 
{ 
    MatchPersonResult mpr = personServ.MatchPerson(p, "MatchAndStore", null); 
    using(MySqlCommand successcmd = new MySqlCommand()) 
    { 
     successcmd.CommandText = "UPDATE myccontacts SET mcid = @mcid, matchresult = @mr, datetimematched = @dtm WHERE id = @id"; 
     successcmd.Connection = conn; 
     successcmd.Parameters.Add("@mcid", MySqlDbType.Int32).Value = int.Parse(mpr.PersonID); 
     successcmd.Parameters.Add("@mr", MySqlDbType.Enum).Value = mpr.MatchResultStatus; 
     successcmd.Parameters.Add("@dtm", MySqlDbType.DateTime).Value = DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString() + " " + DateTime.Now.Hour.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString(); 
     successcmd.Parameters.Add("@id", MySqlDbType.Int32).Value = person["id"]; 
     successcmd.ExecuteNonQuery(); 
     Console.WriteLine(mpr.PersonID); 
    } 
} 

При выполнении запроса, таблица фактически не обновляется ни с чем. Я установил точку останова на вызов Console.WriteLine, чтобы я мог проверить, что происходит, и когда он попал, я загружаю строку с идентификатором, указанным в коде, и он не обновлялся. Даже если я не отлаживаю, но просто позволю выполнить код, я вижу, что ничего не происходит с базой данных. Для ясности - personServ.MatchPerson - фактически веб-ссылка, импортированная в мое решение, поэтому я могу проверить другой конец и фактически видеть, что правильные данные были отправлены и что обновление db должно иметь место.

Кто-нибудь знает, что делать?

ТИА, Бенджи

P.S .: Все кроме для обновления БД работает - подвох блок здесь (не публикуется для краткости) никогда не попал.

+1

Что происходит, когда вы выполняете «select * from myccontacts where id = @id» до и после? Можете ли вы опубликовать результаты? Также вы имеете в виду «mycontacts», а не «myccontacts»? – Crisfole

+0

Где находится 'person [" id "];'? Должно ли это быть 'Convert.ToInt32 (person [" id "]);'? – jams

+0

Я фактически делаю выбор по этим строкам до того, как этот блок try ударит, и на самом деле он работает (так как заполняется объект p в вызове веб-службы). После этого выбор показывает, что обновление не происходит. И нет, имя таблицы правильное, но спасибо за проверку! – benjy

ответ

0

Мог ли вы попробовать этот код?

try 
    { 
     MatchPersonResult mpr = personServ.MatchPerson(p, "MatchAndStore", null); 
     using(MySqlCommand successcmd = new MySqlCommand()) 
     { 
      successcmd.CommandText = "UPDATE myccontacts SET mcid = @mcid, matchresult = @mr, datetimematched = @dtm WHERE id = id"; 
      successcmd.Connection = conn; 
      successcmd.Parameters.AddWithValue("@mcid",int.Parse(mpr.PersonID)); 
      successcmd.Parameters.AddWithValue("@mr",(int)mpr.MatchResultStatus); 
      successcmd.Parameters.AddWithValue("@dtm", DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); 
      successcmd.Parameters.AddWithValue("@id",Convert.Int32(person["id"]); 
      successcmd.Connection.Open(); 
      successcmd.ExecuteNonQuery(); 
      successcmd.Connection.Close(); 
      Console.WriteLine(mpr.PersonID); 
     } 
    } 
Смежные вопросы