2013-08-20 2 views
1

Я пытаюсь обновить таблицу с этим запросом LINQC# обновление таблицы с использованием LINQ to SQL?

public void updateProduct(
    int selectedIDToUpdate, 
    string prodNAMEToUp, 
    double prodPriceToUp, 
    string prodTYPEToUp, 
    int prodMANUToUp, 
    int prodCODEToUp) 
{ 
    DataClassesLINQEPOSDataContext dcld = new DataClassesLINQEPOSDataContext(); 
    TBLPRODUCT tblprod = (from prod in dcld.TBLPRODUCTs 
          where prod.product_id == selectedIDToUpdate 
          select prod).First(); 
    tblprod.product_name = prodNAMEToUp; 
    tblprod.product_price = prodPriceToUp; 
    tblprod.product_type = prodTYPEToUp; 
    tblprod.product_manufacturer = prodMANUToUp; 
    tblprod.product_code = prodCODEToUp; 
    dcld.SubmitChanges(); 
} 

, а затем, когда я начинаю запускать программу я эта ошибку

«InvalidCastException был необработанным» «Указанный бросок не действителен «.

К сожалению я не могу опубликовать изображение, потому что я не имею достаточно репутацию «точки» :(

это управление, чтобы передать параметр в моем классе.

private void btnSaveToUpdate_Click(object sender, EventArgs e) 
    { 
     if (txtNameToUpdate.Text != "" || 
     txtPriceToUpdate.Text != "" || 
     txtTypeToUpdate.Text != "" || 
     txtCodeToUpdate.Text != "") 
     { 
      Connection_Products update = new Connection_Products(); 
      int selctedID = selectedIDToUpdate; 
      string prodNAMEToUp = txtNameToUpdate.Text; 
      double prodPriceToUp = double.Parse(txtPriceToUpdate.Text); 
      string prodTYPEToUp = txtTypeToUpdate.Text; 
      int prodMANUToUp = Convert.ToInt32(cmbManufacturerToUpdate.SelectedValue); 
      int prodCODEToUp = Convert.ToInt32(txtCodeToUpdate.Text); 
      update.updateProduct(selctedID, prodNAMEToUp, prodPriceToUp, 
      prodTYPEToUp, prodMANUToUp, prodCODEToUp); 
     } 
     else 
     { 
      MessageBox.Show("Error"); 
     } 
    } 
+0

пожалуйста, напишите структуру db, а также – Amit

+0

i can not post image Сэр Amit Agrawal. – Luis

+0

Загрузите изображение на http://imageshack.us/ и опубликуйте ссылку – ihebiheb

ответ

1

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

Если в столбце prodPriceToUp используется тип данных money, s отображает тип decimal в Linq2Sql. Вы пытаетесь применить значение double для входного параметра до десятичного, что может вызвать эту проблему. Попробуйте преобразовать prodPriceToUp в decimal перед сохранением.

+0

Я использовал тип данных денег для «prodPriceToUp» ... и double для моего параметра. – Luis

+0

Я уже исправил проблему, возможно, из-за типа данных из базы данных и соединения DBML. Я просто удалил свой DBML и создал еще один, и теперь он работает. – Luis

+0

Если вы обнаружили, что этот ответ заставил вас решить вашу проблему, пожалуйста, примите ответ –

0

Я думаю, что вы упустили что-то в сопоставлении типов между updateProduct параметрами и свойствами в tblprod. Пожалуйста, проверьте here вы используете правильные типы

0

Это потому, что один из следующих пытается бросить в недействительный тип:

tblprod.product_name = prodNAMEToUp; 
tblprod.product_price = prodPriceToUp; 
tblprod.product_type = prodTYPEToUp; 
tblprod.product_manufacturer = prodMANUToUp; 
tblprod.product_code = prodCODEToUp; 

Проверьте каждый из них, что тип слева является так же, как и тип правой стороны. например, убедитесь, что «tblprod.product_name» является строковым свойством, поскольку вы пытаетесь сохранить строку для этого свойства.

Возможно также, что в вашем запросе LINQ предложение where может иметь эту проблему, убедитесь, что «prod.product_id» является целым числом, а не чем-то еще длинным или коротким.

Если все это нормально, и вы все еще получаете исключение, тогда вам нужно будет указать, какая строка выбрасывает исключение, и дать информацию о структуре tblprod;

+0

Я попытался прокомментировать эту часть кодов, то у меня такой же результат. – Luis

+0

на стороне, вы оставляете себя открытыми для исключений, которые бросаются, когда вы читаете и разбираете двойной из txtpricetoupdate.txt. если пользователь вводит непараметрируемое значение, такое как «testvalue», это приведет к сбою. Вы должны поместить в валидацию, такую ​​как: –

+0

Извините, комментарий сломался! double.tryparse (txtpricetoupdate.txt, out value); –

Смежные вопросы