Laden...

keine Ausgabe von einer Stored Procedure

Erstellt von michael_l vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.772 Views
M
michael_l Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren
keine Ausgabe von einer Stored Procedure

Hallo zusammen,

ich hoffe, es kann mir hier jemand helfen. Ich möchte in einer Web-Form eine Stored-Procedure ausführen, leider klappt es bei mir nicht richtig.

hier die aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;

public partial class Default4 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

   
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["uppsConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.StoredProcedure;
               

        if (malebx.Checked)
        {cmd.Parameters.Add ("@male",SqlDbType.Char).Value = "J";}

        else
        {cmd.Parameters.Add ("@male",SqlDbType.Char).Value = "N";}


         if (femalebx.Checked)
        {cmd.Parameters.Add ("@female",SqlDbType.Char).Value = "J";}

        else

        {cmd.Parameters.Add ("@female",SqlDbType.Char).Value = "N"; }

         cmd.CommandText = "peoples_test";
        
        cmd.Connection = con;
        con.Open();

        cmd.ExecuteNonQuery();
        con.Close();
    }
}

und hier die aspx-Datei:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
        <p style="height: 140px">
            male:&nbsp;<asp:CheckBox ID="malebx" runat="server" />
            &nbsp;&nbsp;&nbsp; female:&nbsp;
            <asp:CheckBox ID="femalebx" runat="server" />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </p>
        <asp:GridView ID="GridView1" runat="server" DataKeyNames="name" DataSourceID="SqlDataSource1">
            
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:uppsConnectionString %>" SelectCommand="peoples_test" SelectCommandType="StoredProcedure">
            <SelectParameters>
                <asp:FormParameter FormField="malebx" Name="male" Type="String" DefaultValue="j" />
                <asp:FormParameter FormField="femalebx" Name="female" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
    </form>
</body>
</html>

Die SP wird eigentlich richtig übergeben, zumindest kommt Sie lt. Profiler immer richtig an, aber leider erscheint keine Ausgabe im Gridview.

Wenn ich in den Form Parametern wie oben einen DefaultValue übergebe, bekomme ich eine Ausgabe. Aber die eingegebenen Parameter bleiben unberücksichtigt.

An was kann das liegen? Es wäre wirklich super, wenn mir jemand hier etwas darauf antworten kann. Ich suche schon seit Tagen nach einer Lösung, das kann doch nur eine Kleinigkeit sein, oder?

Gruß

N
135 Beiträge seit 2006
vor 10 Jahren

Woher soll denn ein Rückgabewert kommen?

1.696 Beiträge seit 2006
vor 10 Jahren

Hallo,

.ExecuteNonQuery liefert nur ein Int32 zurück, die dir sagt ob und wieviele Datensätze betroffen sind. Wenn du aber die Rückgabe von SP haben möchtest, dann musst du entweder aus den Parameters auslesen oder nimmt .ExecuteScalar.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

M
michael_l Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren

vielen Dank für die Antworten, das ging ja ruck-zuck.

leider komme ich aber nicht ganz damit klar. Kann mir jemand die weitere Vorgehensweise erklären?

also ich habe mir eine kleine Tabelle angelegt, die sieht so aus:

name gender class
elisabeth female 3
erika female 1
felix male 1
fritz male 2
ingrid female 2
manuel male 3
michael male 1
monika female 3

dann habe ich eine Prozedur erstellt:

ALTER procedure [dbo].[peoples_test]

@male char(10),
@female char (10)

as

if @male = 'J' set @male = 'male'
if @female='J' set @female = 'female'

select name,gender,class
from testingtable
where (@male = gender or @female = gender)

jetzt hätte ich gerne eine Web-Oberfläche, die ungefähr so aussieht:

male: [] female [] Button

wenn male gecheckt ist, sollen alle männl. in einer Gridview angezeigt werden, wenn female alle weibl. und wenn beide gecheckt sind dann beide

mit dem .ExecuteScalar bin ich nicht weitergekommen. Was meinst Du mit Parameter auslesen?

F
10.010 Beiträge seit 2004
vor 10 Jahren

Wie sollen deine Daten jetzut magisch im DataGridView erscheinen, wenn du sie nicht abholst?

Jedes ADO.NET Tutorial erklärt wie du daten abholst ( DataAdapter oder DataReader ).

Und wozu die Stored Proc?

M
michael_l Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren

Ja ja, ich weiß. Bin leider absoluter Neuling was C#, ASP usw. betrifft.
Ich kapiere halt noch nicht alles. Deswegen habe ich auch hier gepostet.

Die Stored Procedure und das klitzekleine Tabellchen sollen natürlich nur der Erläuterung dienen. Ich sollte ein paar größere Prozeduren in einer Weboberfläche auswerten. Da ist doch ein kleines Beispiel nicht ganz verkehrt, wenn man um Hilfe bittet, oder?

F
10.010 Beiträge seit 2004
vor 10 Jahren

[Hinweis] Wie poste ich richtig? Punkt 1.1 und 1.1.1 gelesen?