2014-02-11 2 views
0

У меня возникли проблемы с записью новых данных из моей формы в мой доступ (mdb). У меня есть форма с несколькими полями, которые работают нормально, я могу читать данные в таблице. Однако я не могу редактировать форму и записывать новую информацию в базу данных? См. Код ниже и, если возможно, отредактируйте решение. На данный момент я исчерпал все варианты. Я также новичок в C#, поэтому заранее извиняюсь за то, что не объяснил все правильно!Проблема с записью новых данных из формы в mdb

public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void WObutton_Click(object sender, EventArgs e) 
    { 
     OleDbConnection conn = new OleDbConnection(); 
     conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Michael\Documents\Visual Studio 2012\Projects\WorkOrderTKv2\WorkOrderTKv2TestAccessdb.mdb"; 

     conn.Open(); 

     OleDbCommand cmmd = new OleDbCommand("INSERT INTO TestFC (TestFC) Values(@Name)", conn); 
     if (conn.State == ConnectionState.Open) 
     { 
      cmmd.Parameters.Add("@Name", OleDbType.VarWChar, 20).Value = Name; 

      try 
      { 
       cmmd.ExecuteNonQuery(); 

       MessageBox.Show("DATA ADDED"); 

       conn.Close(); 
      } 
      catch (OleDbException expe) 
      { 
       MessageBox.Show(expe.Message); 
       conn.Close(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("CON FAILED"); 
     } 
    } 
+0

Вы получаете исключение? Если да, то какое исключение бросается? – Jason

+0

FYI, если вы пытаетесь устранить неполадки, вам лучше отобразить 'expe.ToString()', поскольку он включает всю информацию. Кроме того, ваши 'OleDbConnection' и' OleDbCommand' должны находиться в блоках 'using', чтобы обеспечить их очистку, даже если выбрано исключение. –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

2

Нелегко дать вам правильный ответ, потому что многие детали отсутствуют в вашем вопросе. В частности, я не знаю, где вы получаете значения для вставки в базу данных. Эти значения должны считываться из текстовых полей ввода и передаваться в таблицу базы данных для вставки.

Просто исправить вашу процедуру вызывается при нажатии на кнопку (с примечаниями, где отсутствует информация должна быть добавленными вами, глядя на ваш входной форме)

private void WObutton_Click(object sender, EventArgs e) 
{ 
    string cmdText = "INSERT INTO TestFC (WOID, WONum, WODesc, WOStatus, ISD) VALUES (?,?,?,?,?)"; 
    string cnString = @"Provider=Microsoft.ACE.OLEDB.12.0; 
    Data Source=C:\Users\Michael\Documents\Visual Studio 2012\Projects\WorkOrderTKv2\WorkOrderTKv2TestAccessdb.mdb"; 
    using(OleDbConnection conn = new OleDbConnection(cnString)) 
    using(OleDbCommand cmmd = new OleDbCommand(cmdText, conn)) 
    { 
     conn.Open(); 
     cmmd.Parameters.AddWithValue("@FirstParam", doubleValue); // Need a double for field ID 
     cmmd.Parameters.AddWithValue("@SeconParam", valueForWO); // Need a string 
     cmmd.Parameters.AddWithValue("@ThirdParam", valueForDESC); 
     cmmd.Parameters.AddWithValue("@FourthParam", valueForStatus); 
     cmmd.Parameters.AddWithValue("@FifthParam", valueForISD); 

     try 
     { 
      cmmd.ExecuteNonQuery(); 
      MessageBox.Show("DATA ADDED"); 
      conn.Close(); 
     } 
     catch (OleDbException expe) 
     { 
      MessageBox.Show(expe.Message); 
     } 
    } 
} 

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

+0

Спасибо, Стив, я проверю это и отчитаю. Я ценю ваше время на этом! –

+0

Я получаю имя «эти» не существует в текущем контексте? 'these' = doubleValue, valueForWO, valueForDESC, valueForStatus, valueForISD, что я пропустил, так как это не будет работать сейчас? Хорошо, я изменил параметры с помощью WOID, WONum, WODesc и т. Д. У меня нет возможности найти программиста. Я делаю это, потому что некому помочь, поэтому я здесь! –

+0

У меня есть 5 boxboboxes с именами полей в форме. –

0

В инструкции insert вы можете заменить @Name на?. Все параметры будут применяться в том порядке, в котором вы добавляете параметры в команду.

public Form1() 
{ 
    InitializeComponent(); 
} 

private void WObutton_Click(object sender, EventArgs e) 
{ 
    OleDbConnection conn = new OleDbConnection(); 
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Michael\Documents\Visual Studio 2012\Projects\WorkOrderTKv2\WorkOrderTKv2TestAccessdb.mdb"; 

    conn.Open(); 

    OleDbCommand cmmd = new OleDbCommand("INSERT INTO TestFC (TestFC) Values(?)", conn); 
    if (conn.State == ConnectionState.Open) 
    { 
     cmmd.Parameters.Add("@Name", OleDbType.VarWChar, 20).Value = Name; 

     try 
     { 
      cmmd.ExecuteNonQuery(); 

      MessageBox.Show("DATA ADDED"); 

      conn.Close(); 
     } 
     catch (OleDbException expe) 
     { 
      MessageBox.Show(expe.Message); 
      conn.Close(); 
     } 
    } 
    else 
    { 
     MessageBox.Show("CON FAILED"); 
    } 
} 
Смежные вопросы