2013-11-15 3 views
0

Я разрабатываю приложение в VS2010 C# для извлечения данных из одной строки из SQLServer и вставляет его в MySQL.Удалить последние два символа значения, хранящиеся в строке, достоверной

Я извлек данные и сохранил в них строковую переменную. Код загрузки выглядит следующим образом.

SqlCommand cmd = new SqlCommand("SELECT TOP (1) s_name, s_city, s_address, s_added_date, s_added_by FROM tblAQI ORDER BY s_added_date DESC", SSCon); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      s_name = (dr["s_name"].ToString()); 
      s_city = (dr["s_city"].ToString()); 
      s_address = (dr["s_address"].ToString()); 
      s_added_date = (dr["s_added_date"].ToString()); 
      s_added_by = (dr["s_added_by"].ToString()); 
     } 

Все хранится в строковом формате. Проблема в s_added_date, эта переменная содержит значение datetime, например, как 11/15/2013 12:01:00 AM не может вставляться в MySQL, я думаю, из-за AM.

Мой код вставки приведен ниже.

  mcmd.CommandText = "INSERT INTO tblaqi(s_name,s_city,s_address,s_added_date,s_added_by) VALUES(@s_name,@s_city,@s_address,s_added_date,s_added_by)"; 
     mcmd.Parameters.AddWithValue("@s_name", s_name); 
     mcmd.Parameters.AddWithValue("@s_city", s_city); 
     mcmd.Parameters.AddWithValue("@s_address", s_address); 
     mcmd.Parameters.AddWithValue("@s_added_by", s_added_by); 
     mcmd.Parameters.AddWithValue("@s_added_date", s_added_date); 

     int count = mcmd.ExecuteNonQuery(); 
     if (count != 0) 
     { 
      MessageBox.Show("Success..!!"); 
     } 
     else 
      MessageBox.Show("Need to work"); 

Вопрос в том, в чем проблема.

Заранее спасибо.

+1

Почему столбец 'datetime' содержит' AM'? Не храните строки, но правильный тип. –

ответ

1

Решение 1: Ваш запрос недопустимый: вам не хватает @ Символ параметров в insert into заявлении, как показано ниже

mcmd.CommandText = "INSERT INTO tblaqi(s_name,s_city,s_address,s_added_date,s_added_by) VALUES(@s_name,@s_city,@s_address,s_added_date,s_added_by)"; 
                                  ^^^   ^^^ 

Это должно быть Это:

mcmd.CommandText = "INSERT INTO tblaqi(s_name,s_city,s_address,s_added_date,s_added_by) VALUES(@s_name,@s_city,@s_address,@s_added_date,@s_added_by)"; 

Решение 2:

s_added_date=s_added_date.Substring(0, s_added_date.Length - 3);//stores only 11/15/2013 12:01:00 
+0

Вы правы, но похоже, что это не коренная проблема OP. –

1

Вы должны действительно сохранить правильный тип в первую очередь, поэтому datetime вместо varchar.

В противном случае вам всегда приходится разбирать его до DateTime с риском недействительных форматов, проблем локализации и плохой производительности. Вы можете использовать DateTime.ParseExact:

string s_added_date = dr.GetString("s_added_date"); 
DateTime dtAdded = DateTime.ParseExact(s_added_date , "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture); 
mcmd.Parameters.AddWithValue("@s_added_date", dtAdded); 
Смежные вопросы