2015-10-15 1 views
1

Я пытаюсь понять это в течение последних нескольких дней. У меня есть форма с DO/SEE/EXPECT в форме с TextBoxes (это работает), но когда я пытаюсь добавить ComboBox с тремя элементами, я всегда получаю OleDbException на cmd.ExecuteNonQuery();:C# WPF: Добавить элемент из ComboBox для доступа к DB

Необработанное исключение типа «System.Data.OleDb.OleDbException» произошло в System.Data.dll

Дополнительная информация: Несоответствие типов данных в выражении критериев.

Что я здесь делаю неправильно?

using System.Windows; 
using System.Data.OleDb; 
using System.Configuration; 

namespace WpfApplication3 
{ 

    public partial class Records : Window 
    { 
     public Records() 
     { 
      InitializeComponent(); 
     } 

     private void button_Click(object sender, RoutedEventArgs e) 
     { 
      OleDbConnection con = new OleDbConnection(); 
      con.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ToString(); 
      con.Open(); 
      OleDbCommand cmd = new OleDbCommand(); 
      cmd.CommandText = "insert into [tblInboxRecords](DO, SEE, EXPECT, Segment) Values (@do,@see,@ex,@sg)"; 
      cmd.Parameters.AddWithValue("@do", txtdo.Text); 
      cmd.Parameters.AddWithValue("@see", txtsee.Text); 
      cmd.Parameters.AddWithValue("@ex", txtexpect.Text); 
      cmd.Parameters.AddWithValue("@sg", boxsegment.Text); // This is the combobox 
      cmd.Connection = con; 
      cmd.ExecuteNonQuery(); 
      { 
       MessageBox.Show("Item Inserted"); 
      } 

     } 

    } 
} 

И это .xaml для ComboBox:

<ComboBox x:Name="boxsegment" HorizontalAlignment="Left" Height="20" Margin="72,85,0,0" VerticalAlignment="Top" Width="120"> 
    <ComboBoxItem Content="Type A (Operator)"/> 
    <ComboBoxItem Content="Type B (Urgent)"/> 
    <ComboBoxItem Content="Type C (Critical)"/> 
</ComboBox> 

Когда я искал решение, я мог бы найти только то, как использовать элементы из БД в WPF, но не другой путь.

+0

Что тип данных столбца 'сегмент'? Похоже, что он несовместим с 'string', поэтому вам нужно преобразовать' boxsegment.Text' в совместимый тип, если вы хотите использовать его в качестве параметра запроса. –

+0

Я предполагаю, что вы говорите о столбце в Access? Я попробовал «Short Text», «Long Text» и добавил список значений. – Giuliano

ответ

0

Нашли это!

С помощью string SegmentBox = boxsegment.Text.ToString();

вместо cmd.Parameters.AddWithValue("@sg", boxsegment.Text);