2013-10-02 47 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

相关问题