Autor Beitrag
mre_admin
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 21.08.08 15:47 
Hallo,
ich habe ein DataGrid, das ich über eine SqlDataSource fülle.
dann habe ich eine ComboBox.
Wenn nun jemand etwas aus der ComboBox auswählt sollen nur noch die Reihen angezeigt werden, die dem Suchkriterium der ComboBox entwepchen (zb Gender = Male).

Ich habe da bei Microsoft einen ganz netten Tip gefunden:
msdn.microsoft.com/d...ontrolid(VS.80).aspx
Der deckt sich meiner Meinung nach in etwa hiermit:
blog.opencrms.de/200...ViewRealisieren.aspx

Allerdings erhalte ich ein beiden fällen die Meldung:
Exception Details: System.Data.Odbc.OdbcException: ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

Für das Microsoftbeispiel habe ich mir extra eine ODBC Verknüpfung auf die Northwind-Datenbank gemacht.
Wenn ich im SelectCommand den WHERE-Teil weglasse, funktioniert alles super - aber dann filtert es natürlich auch nicht.

Die Lösung kann doch nich so schwer sein, oder?

mfg
mre_
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 21.08.08 18:23 
user profile iconmre_admin hat folgendes geschrieben:
Für das Microsoftbeispiel habe ich mir extra eine ODBC Verknüpfung auf die Northwind-Datenbank gemacht.
Hast du dann auch die Query aus dem zweiten Beispiel genommen? Die im ersten ist nämlich TSQL.
mre_admin Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 22.08.08 09:51 
also für das Microsoftbeispiel sieht die Default.aspx meines Projekts so aus:
ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <body>
    <form id="Form1" runat="server">

      <p><asp:dropdownlist
          id="DropDownList1"
          runat="server"
          autopostback="True">
          <asp:listitem selected>Sales Representative</asp:listitem>
          <asp:listitem>Sales Manager</asp:listitem>
          <asp:listitem>Vice President, Sales</asp:listitem>
      </asp:dropdownlist></p>

      <asp:sqldatasource
          id="SqlDataSource1"
          runat="server"
          connectionstring="<%$ ConnectionStrings:MyNorthwind %>"
          selectcommand="SELECT LastName FROM Employees WHERE Title = @Title" 
          ProviderName="<%$ ConnectionStrings:MyNorthwind.ProviderName %>">
          <selectparameters>
              <asp:controlparameter name="Title" controlid="DropDownList1" propertyname="SelectedValue"/>
          </selectparameters>
      </asp:sqldatasource>

      <p><asp:listbox
          id="ListBox1"
          runat="server"
          datasourceid="SqlDataSource1"
          datatextfield="LastName">
      </asp:listbox></p>

    </form>
  </body>
</html>


In der Web.Config habe ich dazu folgenden ConnectionString:
ausblenden XML-Daten
1:
2:
3:
<connectionStrings>
    <add name="MyNorthwind" connectionString="Dsn=myNorthwind" providerName="System.Data.Odbc" />
</connectionStrings>


Die ODBC Quelle ist als UserDSN mit dem MicrosoftAccessTreiber angelegt, zeigt auf meine Northwind.mdb und enthält für diese Benutzername und Passwort.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 22.08.08 10:44 
Wenn du SqlDataSource nutzt, solltest du auch System.Data.SqlClient als Provider nutzen ;) . Der Connection-String muss dann natürlich auch noch angepasst werden.
mre_admin Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 22.08.08 12:26 
user profile iconKha hat folgendes geschrieben:
Wenn du SqlDataSource nutzt, solltest du auch System.Data.SqlClient als Provider nutzen ;) . Der Connection-String muss dann natürlich auch noch angepasst werden.

Ich nehme mal an der muss dann so aussehen:
ausblenden XML-Daten
1:
<add name="MyNorthwind" connectionString="Data Source=myNorthwind" providerName="System.Data.SqlClient" />					


Fehlermeldung:
An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)


--> Ich will doch garnich zu einem SQL-Server verbinden? Sondern zu einer ODBC-Datenquelle (/Einer AccessDB, die aber nicht im Anwendungsverzeichnis liegt)!

*nix mehr versteh*

-------------
Ok, ich habs einigermaßen...
mein connectionstring ist jetzt wieder wie eh und je
mein asp.net code schaut so aus:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<asp:sqldatasource
          id="SqlDataSource1"
          runat="server"
          connectionstring="<%$ ConnectionStrings:MyNorthwind %>"
          selectcommand="SELECT LastName FROM Employees WHERE Title = ?" 
          ProviderName="<%$ ConnectionStrings:MyNorthwind.ProviderName %>">
          <selectparameters>
              <asp:controlparameter controlid="DropDownList1" propertyname="SelectedValue"/>
          </selectparameters>
      </asp:sqldatasource>


Wenn ich also den namen des Selectparameters nicht angebe und im SQL-Statement ein Fragezeichen verwende klappt das.
Jetzt tun sich mir da aber wieder neue Fragen auf:
1. Wie verhält sich das, wenn ich mehrere Selectparameter habe? Arbeitet der das dann Von Links nach Rechts / Von oben nach unten ab und ich setze einfach ein Fragezeichen nach dem anderen?
2. warum funktioniert das nicht wenn ich Parameternamen angebe???

danke + gruß
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 22.08.08 13:51 
user profile iconmre_admin hat folgendes geschrieben:
Ich will doch garnich zu einem SQL-Server verbinden?
Upsa, habe ".mdf" statt ".mdb" gelesen.

user profile iconmre_admin hat folgendes geschrieben:
1. Wie verhält sich das, wenn ich mehrere Selectparameter habe? Arbeitet der das dann Von Links nach Rechts / Von oben nach unten ab und ich setze einfach ein Fragezeichen nach dem anderen?
So isses, alles andere wäre ja auch völlig verwirrend ;) .

user profile iconmre_admin hat folgendes geschrieben:
2. warum funktioniert das nicht wenn ich Parameternamen angebe???
Wie gesagt: Das ist TSQL, funktioniert deshalb auch nur mit dem SQL Server. Bei solchen Pseudo-DBs wie Access *schauder* darfst du auch nur merkwürdige Pseudo-Syntax erwarten :mrgreen: .
mre_admin Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 22.08.08 15:11 
Ok - Ich kämpfe also anscheinend mit Eigenheiten von Access und nicht mit ASP.Net

Gibt es eine möglichkeit den SQL-Query ausspucken zu lassen, bevor er versendet und der fehler ausgelöst wird?
Bei Classic Asp hab ich einfach immer Response.Write(SQL) gemacht.

Wenn ich den SQL-Query so wie er gesendet wird sehe dann kann ich ihn vielleicht besser grade biegen.

danke + gruß
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 22.08.08 21:46 
Ich dachte, jetzt würde alles funktionieren :gruebel: ?
user profile iconmre_admin hat folgendes geschrieben:
Wenn ich also den namen des Selectparameters nicht angebe und im SQL-Statement ein Fragezeichen verwende klappt das.

user profile iconmre_admin hat folgendes geschrieben:
Gibt es eine möglichkeit den SQL-Query ausspucken zu lassen, bevor er versendet und der fehler ausgelöst wird?
Ich denke (!= weiß), dass die Query genau so abgeschickt wird, wie sie im ASPX-Code steht, und die Parameterdaten in irgendeiner Form seperat mitgeschickt werden. Sonst wären ja die größten Vorteile von Parametern wieder futsch.
mre_admin Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 25.08.08 09:19 
erstmal vielen dank für deine hilfe :)
ich habe letzte woche noch ein wenig geforscht und festgestellt das die tabelle auf die ich zugreifen wollte aus einer anderen access-datenbank gelinkt war. in dieser datenbank war sie dann wiederrum gelinkt und zwar aus einer DB2 datenbank.

-ODBC-Quelle auf DB2-Datenbank gelinkt
-noch etwas am SQL-Query gebastelt
-jetzt tut datenmäßig alles so wie ich will :)

nur eins noch:
ich hätte die tabbellenlinien (=gridlines?) gerne in weiß.
meiner meinung nach habe ich das auch an allen möglichen stellen eingestellt - die teile bleiben aber grau.

edit:
ok - wer sucht der findet - musste die einstellung für jede spalte einzeln machen dann gings :)
mre_admin Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Do 28.08.08 15:52 
abschließende frage:

Kann ich @Parametername nur in SQL-Querys verwenden, die an deinen Microsoft SQL-Server gehen?

Bei DB2 über ODBC sowie bei MySQL über ODBC bekomme ich es immer nur mit der Fragezeichenmethode hin.

grüße...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 28.08.08 16:19 
Das hängt anscheinend doch nicht vom Server sondern nur vom Provider ab:
Zitat:
SqlClient
Uses named parameters in the format @parametername.

OleDb
Uses positional parameter markers indicated by a question mark (?).

Odbc
Uses positional parameter markers indicated by a question mark (?).

OracleClient
Uses named parameters in the format :parmname (or parmname).


_________________
>λ=