Laden...

Variable in Server-Tag

Erstellt von Desastermaster vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.406 Views
D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren
Variable in Server-Tag

Hallo,

ich bin gerade dabei, mich in C# einzuarbeiten und bin dabei auf folgendes Problem gestoßen:

Ich habe ein Formular erstellt und dort eine Datenquelle angelegt. Nun wollte ich mit Hilfe einer Variablen (auftrag), welche in der URL übergeben wurde, das SQL-Statement ändern.

Folgendes habe ich probiert:

<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Provider=SQLOLEDB;Data Source=SERVER-SQL;Persist Security Info=True;Password=p2plusolli;User ID=p2plusolli;Initial Catalog=p2plustest" SelectCommand="SELECT DISTINCT AUFTRAG.AUFTRAG, AUFTRAG.ADRESSE, ... FROM ADRESSE INNER JOIN AUFTRAG ON ADRESSE.ADRESSE = AUFTRAG.ADRESSE INNER JOIN AUFTRAGPOS ON AUFTRAG.AUFTRAG = AUFTRAGPOS.AUFTRAG ... WHERE (AUFTRAG.AUFTRAG = '<% + Request.QueryString["auftrag"] + %>') AND (AUFTRAGPOS.STATUS < 7)" ProviderName="System.Data.OleDb">
</asp:SqlDataSource>

Beim Ausführen bekomme ich dann die Meldung, daß <% ... %> Konstrukte nicht in Server-Tags stehen dürfen.

Aber wie bekomme ich die Variable dann da rein?

Vielen Dank im Vorraus für die Hilfe.

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo Desastermaster,

an dieser Stelle kannst Du das so nicht machen, mal absehen davon das wenn es funktionieren würde, Sql-Injection Tür u. Tor geöffnet wäre.

Das SqlDataSource Controls selbst bietet die Möglichkeit an, einen GET-Parameter auszulesen. Ein Beispiel hierfür findest Du hier:
http://blog.veloursnebel.de/PermaLink,guid,f9f58a1a-f2cf-4be9-8e08-54f5be8f1958.aspx

D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren
Variable deklarieren

Hi Kai,

danke für deine Antwort. Das Beispiel hat mir schon sehr weiter geholfen. Allerdings habe ich nun ein neues Problem:

Bei folgendem Quelltext

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Provider=SQLOLEDB;Data Source=SERVER-SQL;Persist Security Info=True;Password=;User ID=;Initial Catalog=p2plustest"
SelectCommand="SELECT DISTINCT AUFTRAG.AUFTRAG, AUFTRAG.ADRESSE, ADRESSE.FIRMA, ADRESSE.FIRMA1, ADRESSE.STRASSE, ADRESSE.LAND, ... FROM ADRESSE INNER JOIN AUFTRAG ON ADRESSE.ADRESSE = AUFTRAG.ADRESSE ... WHERE (AUFTRAG.AUFTRAG = @auftrag) AND (AUFTRAGPOS.STATUS < 7)" ProviderName="System.Data.OleDb">
<SelectParameters>
<asp:QueryStringParameter Name="auftrag" QueryStringField="auftrag" Type="String" />
</SelectParameters>
</asp:SqlDataSource>

bekomme ich folgende Fehlermeldung:

System.Data.OleDb.OleDbException: Die Variable '@auftrag' muss deklariert werden.

Hast du da eine Ahnung, woran das noch liegen könnte?

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo Desastermaster,

der Parameter "auftrag" wurde auch übergeben?

D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren
Variable deklarieren

Ja, die URL, mit der die Seite aufgerufen wird, sieht wie folgt aus:

http://dat1002/p2plus-f20/neue_seiten/dispo-packschein.aspx?auftrag=02022092

D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren

Ich werde für dieses zweite Problem mal einen neuen Thread aufmachen.

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo Desastermaster,

nein, ist in diesem Fall völlig unnötig. Thread habe ich daher gelöscht.

1.130 Beiträge seit 2005
vor 17 Jahren

Hallo Desastermaster,

warum verwendest Du den System.Data.OleDb Provider? Wenn ich richtig geschaut habe, fragst Du einen MS SQL-Server ab, oder?

D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren

Ok, wie du meinst.

Hat denn keiner mehr eine Idee? Ich verzweifel schon.

D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren
Oledb

Ja, das stimmt. Ist eine MSSQL-Datenbank.
Ich habe einfach mal verschiedene Möglichkeiten ausprobiert.
Wie gesagt, ich bin noch neu in dem Bereich und kenne mich auch mit der Entwicklungsumgebung noch nicht so gut aus.
Da ich auf der Arbeit aber nun unter Zeitdruck Anpassungen vornehmen muß, heißt es: learning by doing.
Habe leider keine Zeit mich vernünftig einzuarbeiten.

Ich hoffe, ich stehe mit dem Quelltext dadurch nicht allzu dumm da? 🙂

D
Desastermaster Themenstarter:in
16 Beiträge seit 2007
vor 17 Jahren
Variable deklarieren

Hallo zusammen,

ich hab' das Problem nun gelöst.

Man muß in OLE-DB Verbindungen die Variablen im SELECT mit ? angeben, habe deshalb auf den nativen SQL-Treiber umgestellt.

Für alle, die es interessiert, hier der Code:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=SERVER-SQL;Initial Catalog=p2plustest;Persist Security Info=True;User ID=;Password="
SelectCommand="SELECT DISTINCT AUFTRAG.AUFTRAG, AUFTRAG.ADRESSE, ADRESSE.FIRMA, ADRESSE.FIRMA1, ADRESSE.STRASSE, ADRESSE.LAND, ADRESSE.PLZ, ADRESSE.ORT, AUFTRAGPOS.TERMIN, AUFTRAGPOS.ARTIKEL, ARTIKEL.NAME, AUFTRAGPOS.MENGE, ... FROM ADRESSE INNER JOIN AUFTRAG ON ADRESSE.ADRESSE = AUFTRAG.ADRESSE INNER JOIN AUFTRAGPOS ON AUFTRAG.AUFTRAG = AUFTRAGPOS.AUFTRAG ... WHERE (AUFTRAG.AUFTRAG = @auftrag) AND (AUFTRAGPOS.STATUS < 7)" ProviderName="System.Data.SqlClient">
<SelectParameters>
<asp:QueryStringParameter Name="auftrag" QueryStringField="auftrag" Type="String" />
</SelectParameters>
</asp:SqlDataSource>

Gruß
Olli