2009-04-29 80 views
0

我想傳遞一個值的數組到一個表對象的數組,以便我可以將它們寫入數據庫。麻煩傳遞值數組到對象數組

我的數據庫看起來是這樣的 - >
tblCaseNotes
CaseNoteID | PersonId |等,等

tblCaseNotesContactType
ROWGUID | CaseNoteID |聯繫方式ID

tblMaintItems
itemID |類別ID

Maint表中的itemID是與當前CaseNoteID一起寫入tblCaseNotesContactType的內容。每個CaseNote可以有多個聯繫人類型。

我至今是價值觀在我btnNew_Click事件產生的CheckListBox ContactType的數組:

// Contact Type check list box 
int cTypeCount = chkContactType.CheckedItems.Count; 
int [] contactTypes = new int[cTypeCount]; 

// reusable generic counter for looping thru the check lists 
int cMaintCounter = 0; 

foreach (int checkedItem in chkContactType.CheckedIndices) 
{ 
    contactTypes[cMaintCounter] = (int)chkContactType.GetItemValue(checkedItem); 
    cMaintCounter++; 
} 
CurrentCaseNote.AddCNote(Program._CurrentPerson.PersonID, Convert.ToDecimal(tbxTimeSpentUnits.Text), chkIsCaseLog.Checked, Convert.ToDateTime(datContactDate.Text), memContactDetails.Text, contactTypes); 

然後我傳遞給我的CurrentCaseNote對象AddCNote方法。

public static void AddCNote(int personID, decimal tsUnits, bool isCaseLog, DateTime cDate, string cDetails, int[] cTypes) 
{ 
    var caseNoteToAdd = new tblCaseNote 
          { 
           CaseNoteID = Guid.NewGuid(), 
           PersonID = personID, 
           TimeSpentUnits =tsUnits, 
           IsCaseLog =isCaseLog, 
           ContactDate =cDate, 
           ContactDetails =cDetails, 
           InsertDate = DateTime.Now, 
           InsertUser = Environment.UserName 
          }; 

    tblCaseNotesContactType[] cTypeToAdd = new tblCaseNotesContactType[cTypes.Length]; 
    cTypeToAdd[0].CaseNoteID = caseNoteToAdd.CaseNoteID; 
    cTypeToAdd[0].ContactTypeID =cTypes[0]; 
    cTypeToAdd[0].rowguid = Guid.NewGuid(); 

    CaseNoteDAL.addCNote(caseNoteToAdd,cTypeToAdd); 

然後將其傳遞給DAL寫入到本地數據庫:

public static void addCNote(tblCaseNote caseNote, tblCaseNotesContactType[] cType) 
{ 
    foreach (var type in cType) 
    { 
     caseNote.tblCaseNotesContactTypes.Add(type);    
    } 
    dcCaseNotes.tblCaseNotes.InsertOnSubmit(caseNote); 

    //dcCaseNotes.tblCaseNotes.InsertOnSubmit(caseNoteToAdd); 
    dcCaseNotes.SubmitChanges(); 
} 

這是給我一個的NullReferenceException是在這條線未處理的錯誤 - >cTypeToAdd[0].CaseNoteID = caseNoteToAdd.CaseNoteID;
是因爲我只使用[0]嗎?我只是這樣做來簡化我的測試。當我一步一步通過代碼我的值數組是正確的,並有一個指導caseNoteToAdd.CasNoteID

有人可以給我幾個指針,我要去哪裏錯了,什麼可能會導致錯誤?正如你從我的代碼中可以看出的那樣,我對這一點很陌生,而且我正在學習中。

感謝,

〜p

回答

6

的問題是,你已經創建引用類型的數組,而不是填充它。

換句話說,此行之後:

tblCaseNotesContactType[] cTypeToAdd = new tblCaseNotesContactType[cTypes.Length]; 

你得空引用數組 - 每個元素的值是零。

然後你需要寫:

cTypeToAdd[0] = new tblCaseNotesContactType(); 

(或類似的語句),然後才能開始改變其性質。

另一種方法是使用一個對象初始化,並做到在一個聲明(創建陣列後):

cTypeToAdd[0] = new tblCaseNotesContactType 
{ 
    CaseNoteID = caseNoteToAdd.CaseNoteID, 
    ContactTypeID =cTypes[0], 
    rowguid = Guid.NewGuid() 
}: 
+0

哇甚至像我一樣的業餘應該已經看到!謝謝! – 2009-04-29 16:14:27