2013-07-11 3 views
0

Я пытаюсь вставить данные в базу данных sql за последние часы. по той или иной причине я могу подключиться к базе данных, но данные не вставляются в базу данных. если я запускаю оператор sql непосредственно в базе данных, он, похоже, работает. Поэтому я смог сделать вывод, что утверждение верно. Кроме того, ошибок во время выполнения не было. У меня следующий код C#:Не удается вставить данные в базу данных mbf

//Neither of these statements seem to work. 
string sqlStatement = "INSERT INTO dbo.eventTable (colA, colB, colC, colD, colE, colF, colG, colH, colI) VALUES (@a,@b,@c,@d,@e,@f,@g,@h,@i)"; 
string altSqlStatement = "INSERT INTO dbo.eventTable (colA, colB, colC, colD, colE, colF, colG, colH, colI) VALUES (@a,@b,@c,@d,@e,@f,@g,@h,@i)"; 

    foreach (DataRow row in importData.Rows) 
    { 
     using (SqlConnection conn = new SqlConnection(form1.Properties.Settings.Default.showConnectionString)) 
     { 
      using (SqlCommand insertCommand = new SqlCommand()) 
      { 
       insertCommand.Connection = conn; 
       insertCommand.CommandText = sqlStatement; 
       insertCommand.CommandType = CommandType.Text; 

       insertCommand.Parameters.AddWithValue("@a", row["CUE"].ToString()); 
       insertCommand.Parameters.AddWithValue("@b", row["HH"].ToString()); 
       insertCommand.Parameters.AddWithValue("@c", row["MM"].ToString()); 
       insertCommand.Parameters.AddWithValue("@d", row["SS"].ToString()); 
       insertCommand.Parameters.AddWithValue("@e", row["FF"].ToString()); 
       insertCommand.Parameters.AddWithValue("@f", row["ADDR"].ToString()); 
       insertCommand.Parameters.AddWithValue("@g", row["Event Description"].ToString()); 
       insertCommand.Parameters.AddWithValue("@h", row["CAL"].ToString()); 
       insertCommand.Parameters.AddWithValue("@i", row["PFT"].ToString()); 

       try 
       { 
        conn.Open(); 
        int _affected = insertCommand.ExecuteNonQuery(); 
       } 
       catch(SqlException e) 
       { 
        // do something with the exception 

       } 
      } 
     } 
    } 

если изменить параметры подключения к чему-то ложь, возникает ошибка, так что кажется правильным.

Любая помощь была бы принята с благодарностью.

Спасибо!

Alex

+0

Три вещи, чтобы попытаться (вероятно, не решить ничего, но только, чтобы сузить ее вниз): 1. Попробуйте инстанцирование вашего 'SqlCommand' непосредственно с подключением/CommandText как' используя (SqlCommand insertCommand = новый SqlCommand (sqlStatment, conn)). 2. Убедитесь, что все ваши столбцы в базе данных имеют тип 'varchar' или' char', вы передаете все параметры 'string', чтобы вы могли некоторые конфликты там. 3. Отлаживайте и проверяйте результаты 'insertCommand.ExecuteNonQuery();', наблюдая переменную '_affected'. –

ответ

0

Попробуйте использовать эту функцию в качестве шаблона, большая разница в том, что она открывает соединение перед созданием команды. Я не видел, чтобы это было так, как вы его настраивали. Вы также действительно должны открывать соединение вне цикла for, а не в цикле for. Зачем открывать и закрывать его повторно; в цикле, должна быть внутри внутренним «с помощью»

public void ExecuteQuery(string query, Dictionary<string, object> parameters) 
{ 
using (SqlConnection conn = new SqlConnection(this.connectionString)) 
{ 
    conn.Open(); 

    using (SqlCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = query; 

     if (parameters != null) 
     { 
      foreach (string parameter in parameters.Keys) 
      { 
       cmd.Parameters.AddWithValue(parameter, parameters[parameter]); 
      } 
     } 

     cmd.ExecuteNonQuery(); 
    } 
} 
} 
Смежные вопросы