[英]LINQ to SQL Failing to Insert to the Database
我目前正在學習LINQ,現在我嘗試使用Linq向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)
這將是失敗的Parse
方法之一。 您可以選擇一些調試方法:
在行LEGAL_MEMBER _legalMember = new LEGAL_MEMBER
上放置一個斷點,然后在VS的Immediate Window
中嘗試所有單獨的Parse
調用。
逐一傳遞屬性值,然后查看失敗之處。
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;
由此很難確定,但是您給出的代碼中最明顯的問題是以下行:
DateOfBirth = int.Parse(txtDateOfBirth.Text)
我假設這將嘗試將類似於“ 09/21/2015”的字符串轉換為儒略日期或OADate日期?
如果是這樣,則需要將字符串轉換為日期時間,然后再轉換為整數。
要獲取日期時間,請嘗試
var dob = DateTime.Parse(txtDateOfBirth.Text);
然后獲得OADate使用
DateOfBirth = dob.ToOADate().
如果您需要儒略日期,請使用一個簡單的輔助函數,如下所示:
public static double ToJulianDate(this DateTime date)
{
return date.ToOADate() + 2415018.5;
}
(摘自此答案 )
InceptionDate = DateTime.Parse(txtInceptionDate.Text);
也是如此InceptionDate = DateTime.Parse(txtInceptionDate.Text);
但是,如果您有選擇的話,一個更好的選擇是將這些日期作為DateTime列存儲在數據庫中。
我認為您不需要此行:刪除此行后嘗試插入:
LegalMembershipID = int.Parse(txtMemberShipNumber.Text)
因為您的主鍵字段是自動遞增。 請刪除它,然后嘗試插入。
我已經意識到我的復選框是引起問題的地方。 深潛之后,我設法修復了它。 以下是我的解決方案,並感謝所有幫助我的人。
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.