2015-09-21 2 views
0

В настоящее время я изучаю LINQ, и теперь я пытаюсь вставить Linq в sql, но у меня возникают проблемы при вставке, поскольку он показывает мне неправильный формат строки при отладке, но это не указывает на определенной строке. Не могли бы вы помочь мне, где я ошибся.LINQ to SQL, не вставляемый в базу данных

кнопку Сохранить

List<LEGAL_MEMBER> _LegalMemberList = _dc.LEGAL_MEMBERs.Where(a => a.IDNumber == txtIDNumber.Text.ToString()).ToList(); 

if (rbtnAreYouEmployed.Items[0].Selected == true) 
{ 
    ViewState["AreyouEmployed"] = true; 
} 
else 
{ 
    ViewState["AreyouEmployed"] = false; 
} 

if (rbtnIsSACitizen.Items[0].Selected == true) 
{ 
    ViewState["IsSACitizen"] = true; 
} 
else 
{ 
    ViewState["IsSACitizen"] = false; 
} 
if (_LegalMemberList != null) 
{ 
    if (_LegalMemberList.Count() == 0) 
    { 
     LEGAL_MEMBER _legalMember = new LEGAL_MEMBER 
     { 
      IDNumber = txtIDNumber.Text, 
      InceptionDate = Convert.ToDateTime(txtInceptionDate.Text), 
      LegalPreferedName = txtPreferedName.Text, 
      Initials = txtInitials.Text, 
      TitleID = int.Parse(cboTitle.SelectedValue), 
      FullNames = txtFullNames.Text, 
      Surname = txtSurname.Text, 
      Age = int.Parse(txtAge.Text), 
      DateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text), 
      PassportNumber = txtPassport.Text, 
      AreyouEmployed = bool.Parse(ViewState["AreyouEmployed"].ToString()), 
      Employer = txtEmployer.Text, 
      ContactNumber = txtContactNumber.Text, 
      OtherContanctNumber = txtOtherContanctNumber.Text, 
      EmailAddress = txtEmailAddress.Text, 
      IsSACitizen = bool.Parse(ViewState["IsSACitizen"].ToString()), 
      TelephoneWork = txtTelephoneWork.Text, 
      TelephoneHome = txtTelephoneHome.Text, 
     }; 

     _dc.LEGAL_MEMBERs.InsertOnSubmit(_legalMember); 
     _dc.SubmitChanges(); 

SQL Таблица

CREATE TABLE [dbo].[LEGAL_MEMBER](
[LegalMembershipID] [int] IDENTITY(1,1) NOT NULL, 
[InceptionDate] [datetime] NULL, 
[LegalPreferedName] [nvarchar](50) NULL, 
[Initials] [nvarchar](50) NULL, 
[TitleID] [int] NULL, 
[FullNames] [nvarchar](50) NULL, 
[Surname] [nvarchar](50) NULL, 
[Age] [int] NULL, 
[DateOfBirth] [datetime] NULL, 
[IDNumber] [nvarchar](50) NULL, 
[PassportNumber] [nvarchar](50) NULL, 
[AreyouEmployed] [bit] NULL, 
[Employer] [nvarchar](50) NULL, 
[ContactNumber] [nvarchar](50) NULL, 
[OtherContanctNumber] [nvarchar](50) NULL, 
[EmailAddress] [nvarchar](50) NULL, 
[IsSACitizen] [bit] NULL, 
[TelephoneWork] [nvarchar](50) NULL, 
[TelephoneHome] [nvarchar](50) NULL) 
+0

Какая ценность 'txtDateOfBirth.Tex'? 'DateOfBirth = int.Анализировать (txtDateOfBirth.Text) '? проверьте входные данные, чтобы убедиться, что они имеют смысл. – user1666620

+0

Try Convert.ToDateTime (txtInceptionDate.Text) –

+0

LegalMembershipID - мой основной ключ – JuniorLinq

ответ

0

Это будет один из Parse методов, которые не удастся. У вас есть несколько вариантов для отладки это:

  1. Поместите контрольную точку на линии LEGAL_MEMBER _legalMember = new LEGAL_MEMBER, а затем попытаться все индивидуальные Parse звонков в Immediate Window в VS.

  2. Передать значения свойств один за другим и посмотреть, где он не работает.

    LEGAL_MEMBER _legalMember = new LEGAL_MEMBER(); 
    _legalMember.LegalMembershipID = int.Parse(txtMemberShipNumber.Text); 
    _legalMember.InceptionDate = DateTime.Parse(txtInceptionDate.Text); 
    _legalMember.LegalPreferedName = txtPreferedName.Text; 
    _legalMember.Initials = txtInitials.Text; 
    _legalMember.TitleID = int.Parse(cboTitle.SelectedValue); 
    _legalMember.FullNames = txtFullNames.Text; 
    _legalMember.Surname = txtSurname.Text; 
    _legalMember.Age = int.Parse(txtAge.Text); 
    _legalMember.DateOfBirth = int.Parse(txtDateOfBirth.Text); 
    _legalMember.IDNumber = txtIDNumber.Text; 
    _legalMember.PassportNumber = txtPassport.Text; 
    _legalMember.AreyouEmployed = bool.Parse(ViewState["AreyouEmployed"].ToString()); 
    _legalMember.Employer = txtEmployer.Text; 
    _legalMember.ContactNumber = txtContactNumber.Text; 
    _legalMember.OtherContanctNumber = txtOtherContanctNumber.Text; 
    _legalMember.EmailAddress = txtEmailAddress.Text; 
    _legalMember.IsSACitizen = bool.Parse(ViewState["IsSACitizen"].ToString()); 
    _legalMember.TelephoneWork = txtTelephoneWork.Text; 
    _legalMember.TelephoneHome = txtTelephoneHome.Text; 
    
+0

Я отредактировал код с надеждой, что я узнаю, что он показывает ошибку. У меня есть отладка и пока не указываю, где ошибка, пока я не получил это значение Значение было слишком большим или слишком маленьким для Int32. Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде. " Сведения об исключении: System.OverflowException: значение было слишком большим или слишком маленьким для Int32. – JuniorLinq

0

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

DateOfBirth = int.Parse(txtDateOfBirth.Text) 

Я предполагаю, что это будет пытаться конвертировать строку, похожую на «09/21/2015», на что-то вроде даты Julian или OADate?

Если это так, вам нужно преобразовать строку в дату и время, а затем в целое число.

Чтобы получить DateTime, попробуйте

var dob = DateTime.Parse(txtDateOfBirth.Text); 

Чтобы затем получить частное использование OADate

DateOfBirth = dob.ToOADate(). 

Если вам нужна дата юлианского использовать простую вспомогательную функцию:

public static double ToJulianDate(this DateTime date) 
{ 
    return date.ToOADate() + 2415018.5; 
} 

(снято с this answer)

То же самое можно сказать и о InceptionDate = DateTime.Parse(txtInceptionDate.Text);

Если у вас есть выбор, лучшим вариантом было бы сохранить эти даты в столбцах DateTime в базе данных.

0

Я не думаю, что вам нужна эта строка: Попробуйте вставить после удаления этой строки:

 LegalMembershipID = int.Parse(txtMemberShipNumber.Text) 

в качестве основного ключевого поля является автоматическим приращением. Удалите это, а затем попробуйте вставить.

+0

Я удалил первую строку и все еще не работал. « Значение было слишком большим или слишком большим маленький для Int32. Описание: Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде. Сведения об исключении: System.OverflowException: значение было слишком большим или слишком маленьким для Int32. « – JuniorLinq

+0

В вашем сценарии таблицы я заметил, что [DateOfBirth] имеет тип int, как DOB имеет тип int? –

+0

О да дайте мне изменить его сейчас ... – JuniorLinq

0

Я понял, что мои флажки, где причина проблемы. После глубокого погружения мне удалось это исправить. ниже мое решение и спасибо всем, кто помог мне.

  List<LEGAL_MEMBER> _LegalMemberList = _dc.LEGAL_MEMBERs.Where(a => a.IDNumber == txtIDNumber.Text.ToString()).ToList(); 

      if (rbtnAreYouEmployed.Items[0].Selected == true) 
      { 
       ViewState["AreyouEmployed"] = true; 
      } 
      else 
      { 
       ViewState["AreyouEmployed"] = false; 
      } 

      if (rbtnIsSACitizen.Items[0].Selected == true) 
      { 
       ViewState["IsSACitizen"] = true; 
      } 
      else 
      { 
       ViewState["IsSACitizen"] = false; 
      } 
      if (_LegalMemberList != null) 
      { 
       if (_LegalMemberList.Count() == 0) 
       { 
        LEGAL_MEMBER _legalMember = new LEGAL_MEMBER 
        { 
         IDNumber = txtIDNumber.Text, 
         InceptionDate = Convert.ToDateTime(txtInceptionDate.Text), 
         LegalPreferedName = txtPreferedName.Text, 
         Initials = txtInitials.Text, 
         TitleID = int.Parse(cboTitle.SelectedValue), 
         FullNames = txtFullNames.Text, 
         Surname = txtSurname.Text, 
         Age = int.Parse(txtAge.Text), 
         DateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text), 
         PassportNumber = txtPassport.Text, 
         AreyouEmployed = bool.Parse(ViewState["AreyouEmployed"].ToString()), 
         Employer = txtEmployer.Text, 
         ContactNumber = txtContactNumber.Text, 
         OtherContanctNumber = txtOtherContanctNumber.Text, 
         EmailAddress = txtEmailAddress.Text, 
         IsSACitizen = bool.Parse(ViewState["IsSACitizen"].ToString()), 
         TelephoneWork = txtTelephoneWork.Text, 
         TelephoneHome = txtTelephoneHome.Text, 
        }; 

        _dc.LEGAL_MEMBERs.InsertOnSubmit(_legalMember); 
        _dc.SubmitChanges(); 
Смежные вопросы