webForumDet fria alternativet

Object reference not set to an instance of an object.

.NETur .NET

20 svar · 535 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
Frågan#1

Medans jag ändå håller på...så här kommer nästa problem

	public class WebForm1 : System.Web.UI.Page
	{
		protected System.Web.UI.WebControls.TextBox namn;
		protected System.Web.UI.WebControls.Button btnSkicka;
		protected System.Web.UI.WebControls.Repeater Repeater1;
		protected System.Web.UI.WebControls.TextBox mess;
		protected System.Web.UI.WebControls.Repeater myDataView;

	
		private void Page_Load(object sender, System.EventArgs e)
		{
			string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
			string strSQL = "SELECT f_namn, f_mess FROM t_boken ORDER BY f_id DESC";
			
			OleDbConnection objConnect = new OleDbConnection(strConnect);
			OleDbDataAdapter objQuery = new OleDbDataAdapter(strSQL, objConnect);
			
			DataSet objDS = new DataSet();
			objQuery.Fill(objDS, "gbok");

			DataTable objDT = objDS.Tables["gbok"];
                    DataView objDV = new DataView(objDT);

			[b]myDataView.DataSource = objDV;[/b]
			myDataView.DataBind();

		}.......osv osv

men jag får:
System.NullReferenceException: Object reference not set to an instance of an object

Vad är fel?

Vides avatarVideMedlem sedan dec. 19998 577 inlägg
#2

Vart initierar du objektet "myDataView" någon stans, och finns den tillgänglig när du kör funktionen?

Mvh, Vide

icaaqMedlem sedan okt. 20005 273 inlägg
#3

ok......jag måste ju säg att jag är ny på detta med OOP. men det jag vill åstadkomma är en simpel sida där det finns två st textboxar (Namn och Mess) sen finns det en submit knapp som ska lägga till ett mess.

Det finns också en Repeater där alla tidigare mess ska listas......det är den jag försöker att fylla med värden.....koden för Repeatern ser ut så här

<TABLE id="Table2" cellSpacing="1" cellPadding="1" width="300" border="0">
	<asp:Repeater id="rep" runat="server">
		<HeaderTemplate>
			<TR>
				<TD bgcolor="PapayaWhip">
					Här kommer era kommentarer!!<hr noshade size="1">
				</TD>
			</TR>
		</HeaderTemplate>
		<ItemTemplate>
			<TR>
				<TD bgcolor="#ffcc99">
					<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
					säger:<br>
					<b>
						<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
					</b>
				</TD>
			</TR>
		</ItemTemplate>
		<AlternatingItemTemplate>
			<TR>
				<TD bgcolor="PapayaWhip">
					<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
					säger:<br>
					<b>
						<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
					</b>
				</TD>
			</TR>
		</AlternatingItemTemplate>
		<SeparatorTemplate>
			<TR>
				<TD bgcolor="PapayaWhip">
					<hr noshade size="1">
				</TD>
			</TR>
		</SeparatorTemplate>
		<FooterTemplate>
			<TR>
				<TD bgcolor="PapayaWhip">
					<hr noshade size="1">
					&copy; icaaq 2002
				</TD>
			</TR>
		</FooterTemplate>
	</asp:Repeater></TABLE>

och jag vill fylla den så här, vilket inte går

		private void Page_Load(object sender, System.EventArgs e)
{
	string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
	string strSQL = "SELECT f_namn, f_mess FROM t_boken ORDER BY f_id DESC";
	
	OleDbConnection objConnect = new OleDbConnection(strConnect);
	OleDbDataAdapter objQuery = new OleDbDataAdapter(strSQL, objConnect);
	
	DataSet objDS = new DataSet();
	objQuery.Fill(objDS, "gbok");

	DataTable objDT = objDS.Tables["gbok"];
            	
	rep.DataSource = new DataView(objDT);
	rep.DataBind();

}

nån som kan guida mig?

SweyMedlem sedan apr. 20003 971 inlägg
#4

Repeater är en klass. Alla klasser måste initieras med new, till skillnad mot strukturer (och till skillnad mot C++).

A a; // Giltigt för strukturer och i C++ även för klasser
A a = new A(); // För klasser i C#
A *a = new A(); // Samma sak i C++

Lägg alltså till
myDataView = new Repeater();
före du använder klassinstansen.

icaaqMedlem sedan okt. 20005 273 inlägg
#5

ok......nu funkar det.....jag la till

Repeater rep = new Repeater();
			rep.DataSource = new DataView(objDT);
			rep.DataBind();

.......nu till nästa.......

jag har denna när jag klickar på knappen.

private void btnSkicka_Click(object sender, System.EventArgs e)
		{
			string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
			string strSQL = "INSERT INTO t_boken(f_namn, f_mess)VALUES("+ namn.Text +", "+ mess.Text +")";
			
			OleDbConnection objConnect = new OleDbConnection(strConnect);
			OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);

			objConnect.Open();
			objCommand.ExecuteNonQuery();
			objConnect.Close();

			
		}

men jag får No value given for one or more required parameters. hur gör jag för att skriva ut SQL satsen....??så jag ser vad som är fel, eller om ni ser vad som är fel ??

NETworks avatarNETworkMedlem sedan juni 20011 732 inlägg
#6

Så här kanske:

INSERT INTO t_boken (f_namn, f_mess) VALUES ('"+ namn.Text +"', '"+ mess.Text +"')

icaaqMedlem sedan okt. 20005 273 inlägg
#7
private void btnSkicka_Click(object sender, System.EventArgs e)
		{
			string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
			string strSQL = "INSERT INTO t_boken(f_namn, f_mess)VALUES('"+ namn.Text +"', '"+ mess.Text +"')";
			
			OleDbConnection objConnect = new OleDbConnection(strConnect);
			OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
			
			
			[b]objConnect.Open();[/b]
			objCommand.ExecuteNonQuery();
			objConnect.Close();

			
		}

jag får No value given for one or more required parameters.
på den feta raden ...vad är det som saknas??

NETworks avatarNETworkMedlem sedan juni 20011 732 inlägg
#8

Aha, du måste skriva så här:

objConnect.Connection.Open();
objCommand.ExecuteNonQuery();
objConnect.Connection.Close();
icaaqMedlem sedan okt. 20005 273 inlägg
#9

nej det funkar inte det heller.......

jag får samma fel :(

NETworks avatarNETworkMedlem sedan juni 20011 732 inlägg
#10

Hm... prova så här då:

objCommand.Connection.Open();
objCommand.ExecuteNonQuery();
objCommand.Connection.Close();
icaaqMedlem sedan okt. 20005 273 inlägg
#11

noap......nu har jag så här

[SIZE=1]
private void btnSkicka_Click(object sender, System.EventArgs e)
		{
			string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
			string strSQL = "INSERT INTO t_boken(f_namn, f_mess)VALUES('"+ namn.Text +"', '"+ mess.Text +"')";
			
			OleDbConnection objConnect = new OleDbConnection(strConnect);
			OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
			
			
			[b]objCommand.Connection.Open();[/b]
			objCommand.ExecuteNonQuery();
			objCommand.Connection.Close();

			
		}
[/SIZE]

den feta raden blir
No value given for one or more required parameters.

juventus1Medlem sedan dec. 2000399 inlägg
#12

Jag ser inte riktigt vad som är fel men prova detta så kanske man får en ledtråd:

private void btnSkicka_Click(object sender, System.EventArgs e)
		{
			string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
			string strSQL = "INSERT INTO t_boken(f_namn, f_mess) VALUES ('"+ namn.Text +"', '"+ mess.Text +"')";
			
			OleDbConnection objConnect = new OleDbConnection(strConnect);
			OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
			
		try
{
	
			objCommand.Connection.Open();
			objCommand.ExecuteNonQuery();
			objCommand.Connection.Close();
}
catch(OleDbException ex)
{
Response.Write(ex.Message)
}

			
		}
icaaqMedlem sedan okt. 20005 273 inlägg
#13

ok......ska testa när jag kommer hem .....

Men funkar Response.Write men C#??

icaaqMedlem sedan okt. 20005 273 inlägg
#14

Det händer ingenting när jag trycker på "submit" då ...........

va fan kan vara fel??

NETworks avatarNETworkMedlem sedan juni 20011 732 inlägg
#15

Jag kan inte se något fel i den kod du har skickat upp här. I sista exemplet så prövar du koden och om den inte fungerar så catchar du ett oledbexception. Att det inte händer något när du catchar en oledbexception beror på att det inte finns något oledbexception att catcha... mao det är något annat fel. Prova en try and catch och catcha alla exceptions... jag tror man skriver så här:

try {
   kod som testas
}
catch (Exception ex) {
   Response.Write(ex.ToString());
}

Det kanske är något helt annat som är fel? Nu är jag ingen expert på det här men det kanske är något simpelt fel som inte alls har med den här koden att göra (även om det väl inte är troligt). Är db-filen skrivskyddad? Får du ut text ur namn.Text och om inte, tillpåter du nollvärden i din db?

Skapa en ny sida och gör exakt likadant och se om du får samma fel då också.

NETworks avatarNETworkMedlem sedan juni 20011 732 inlägg
#16

Det bör vara något med din sql-sats. Har du mellanslag i din sql-sats (före och efter VAULES)!? Jag tror att du behöver det nämligen, i ditt exempel har du skrivit ihop VALUES mellan parenteserna. SKriv exakt så här:

string strSQL = "INSERT INTO t_boken(f_namn, f_mess) VALUES ('"+ namn.Text +"', '"+ mess.Text +"')";
icaaqMedlem sedan okt. 20005 273 inlägg
#17

det var jag som inte hade alla sinnen i form igår........det funkade jätte bra när jag la dit try, catch ....

men vad som inte funkar är databindningen........

private void Page_Load(object sender, System.EventArgs e)
		{
			string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
			string strSQL = "SELECT f_namn, f_mess FROM t_boken ORDER BY f_id DESC";
			
			OleDbConnection objConnect = new OleDbConnection(strConnect);
			OleDbDataAdapter objQuery = new OleDbDataAdapter(strSQL, objConnect);
			
			DataSet objDS = new DataSet();
			objQuery.Fill(objDS, "gbok");

			DataTable objDT = objDS.Tables["gbok"];
            Repeater rep = new Repeater();
			rep.DataSource = new DataView(objDT);
			rep.DataBind();

		}

......och repeteatern ser ut så här

<asp:Repeater id="rep" runat="server">
	<HeaderTemplate>
		<TR>
			<TD bgcolor="PapayaWhip">
				Här kommer era kommentarer!!<hr noshade size="1">
			</TD>
		</TR>
	</HeaderTemplate>
	<ItemTemplate>
		<TR>
			<TD bgcolor="#ffcc99">
				<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
				säger:<br>
				<b>
					<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
				</b>
			</TD>
		</TR>
	</ItemTemplate>
	<AlternatingItemTemplate>
		<TR>
			<TD bgcolor="PapayaWhip">
				<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
				säger:<br>
				<b>
					<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
				</b>
			</TD>
		</TR>
	</AlternatingItemTemplate>
	<SeparatorTemplate>
		<TR>
			<TD bgcolor="PapayaWhip">
				<hr noshade size="1">
			</TD>
		</TR>
	</SeparatorTemplate>
	<FooterTemplate>
		<TR>
			<TD bgcolor="PapayaWhip">
				<hr noshade size="1">
				&copy; icaaq 2002
			</TD>
		</TR>
	</FooterTemplate>
</asp:Repeater>

några förslag ??

NETworks avatarNETworkMedlem sedan juni 20011 732 inlägg
#18

Prova att skapa en dataview istället som du fyller med ditt dataset. Sedan kan du fylla din repeater med din dataview.

DataView dv = objDS.Tables["gbok"].DefaultView;

rep.DataSource = dv;
rep.DataBind();

Alternativt om du vill ha din nuvarande struktur, testa att lägga till Defaultview såhär:

DataTable objDT = objDS.Tables["gbok"][B].DefaultView[/B];
icaaqMedlem sedan okt. 20005 273 inlägg
#19

det funkade...tack så mycket.....vill ni se resultatet så kolla här....

detta är en väldigt avancerad sida så håll i er ;)

http://213.67.192.80/net/

icaaqMedlem sedan okt. 20005 273 inlägg
#20

som ni ser funkar den inte klockrent.......vad är det som är fel??

146 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)