2013-10-02 48 views
0

下面是工作的代碼:爲什麼一段代碼工作,但其他不是?

protected void submitForMail(object sender, EventArgs e) 
{ 
    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\TravelJoansDB.mdb;"; 
    string cmdstr = "INSERT INTO EmailList(FirstName,LastName,EmailAddress) VALUES (@FirstName, @LastName, @EmailAddress)"; 

    OleDbConnection con = new OleDbConnection(constr); 
    OleDbCommand com = new OleDbCommand(cmdstr, con); 

    TextBox tFirstName = (TextBox)FormView1.FindControl("FirstName"); 
    TextBox tLastName = (TextBox)FormView1.FindControl("LastName"); 
    TextBox tEmail = (TextBox)FormView1.FindControl("EmailAddress"); 

    con.Open(); 
    com.Parameters.AddWithValue("@FirstName", tFirstName.Text); 
    com.Parameters.AddWithValue("@LastName", tLastName.Text); 
    com.Parameters.AddWithValue("@EmailAddress", tEmail.Text); 
    com.ExecuteNonQuery(); 
    con.Close(); 
} 

這裏是不代碼:

protected void UpdatePic(object sender, EventArgs e) 
{ 
    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\TravelJoansDB.mdb;"; 
    string cmdstr = "INSERT INTO BlogEntryItems(Picture) VALUES (@UpdatedPic)"; 

    OleDbConnection con = new OleDbConnection(constr); 
    OleDbCommand com = new OleDbCommand(cmdstr, con); 

    TextBox uPic = (TextBox)DataList1.FindControl("BEIPictureField"); 

    con.Open(); 
    com.Parameters.AddWithValue("@UpdatedPic", uPic.Text); 
    com.ExecuteNonQuery(); 
    con.Close(); 
} 

這裏是含有Datalist1控制的代碼:

<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
    DataFile="~/App_Data/TravelJoansDB.mdb" 
    SelectCommand="SELECT * FROM Table2 INNER JOIN [BlogEntryItems] ON Table2.ID=BlogEntryItems.BlogID WHERE [email protected]" > 
    <SelectParameters> 
     <asp:QueryStringParameter Name="ID" QueryStringField="ID" /> 
    </SelectParameters> 
</asp:AccessDataSource> 
<asp:DataList ID="DataList1" runat="server" DataSourceID="AccessDataSource1"> 
<ItemStyle /> 
<ItemTemplate> 
    <table> 
     <tr> 
      <td> 
       <br /> 
       <asp:Image ID="Image1" CssClass="placePicCenter" runat="server" 
       BorderWidth="1px" 
       BorderColor="#EEEEEE" 
       ImageUrl='<%# "PlaceImages/" + Eval("Picture") %>' /><br /> 
       <asp:TextBox ID="BEIPictureField" runat="server" Text='<%# Bind("Picture") %>' /><br /> 
       <asp:Button ID="UpdatePicButton" runat="server" Text="Update" OnClick="UpdatePic" /> 
       <br /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <asp:Label ID="Label4" CssClass="placeBodyStyle" runat="server" Text='<%# Eval("PicText1") %>' /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       &nbsp; 
      </td> 
     </tr> 
    </table> 
</ItemTemplate> 
</asp:DataList> 

這些塊的代碼是針對兩個不同頁面上的兩個不同按鈕。我運行第二個代碼塊時得到的錯誤是「對象引用未設置爲對象的實例」。任何幫助,將不勝感激。

+0

幾乎所有'NullReferenceException'的情況都是一樣的。請參閱「[什麼是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)」的一些提示。 –

+0

據我所知,它是說它沒有被初始化,但爲什麼第一部分的代碼工作是爲我的網站中的另一個頁面上的另一個按鈕。 – Joseph

回答

4

此行是可能的原因,它無法找到控件BEIPictureField因此「對象引用未設置爲對象的實例」。錯誤

TextBox uPic = (TextBox)DataList1.FindControl("BEIPictureField"); 

編輯1

試試這個:

TextBox uPic = (TextBox)DataList1.Items[1].FindControl("BEIPictureField"); 

你將不得不重寫你的邏輯來查找每個項目不能在DataList控件,因爲它是你不會找到父它在那裏。

+2

也有可能'DataList1'爲'null'。 – Jay

+0

檢查我編輯的問題。爲什麼它不能找到控制權? – Joseph

+0

@Joseph看到我編輯的答案 – Ahsan

相關問題