Avatar billede misbruger Nybegynder
29. november 2002 - 12:53 Der er 15 kommentarer og
1 løsning

Kald af stored procedure?

Hvordan kalder man en stored procedure fra en method?

/*
Min Web.config
*/
<appSettings>   
  <add key="ConnStr" value="Data Source = localhost; Initial Catalog = myDB; User ID = sa; Password = ; Trusted_Connection = sspi" />
</appSettings>


/*
Min method
*/

private string ConnStr = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"];

public static StringCollection getTexts(int Language, string PageName)
{
   
    SqlCommand PageTextCmd = new SqlCommand("ViewPageTexts", ConnStr);
    PageTextCmd.CommandType = CommandType.StoredProcedure;

    PageTextCmd.Parameters.Add("@Language", SqlDbType.Int).Value = Language;
    PageTextCmd.Parameters.Add("@PageName", SqlDbType.Char).Value = PageName;
   
    ConnStr.Open();
    ConnStr.Close();

    StringCollection result = new StringCollection();
    return result;
}
Avatar billede z42cool Nybegynder
29. november 2002 - 13:03 #1
Hvis du ikke skal have et resultat sæt tilbage så

PageTextCmd.ExecuteNonQuery()

Ellers

SqlDataReader reader = PageTextCmd.ExecuteReader()
Avatar billede lgy Nybegynder
29. november 2002 - 13:04 #2
Du mangler at execute din stored procedure.

Det gøres enter ved en

PageTextCmd.ExecuteReader el.lign. resultatet af denne gives til en datareader

SqlDataReader dr = PageTextCmd.ExecuteReader();

While(dr.read());
Avatar billede lgy Nybegynder
29. november 2002 - 13:06 #3
UPs -

de enkelte felt i resultatet kan du så give til en StringCollection eller andet.

Lars
Avatar billede misbruger Nybegynder
29. november 2002 - 13:22 #4
Men jeg får en fejl i denne linie hver gang jeg prøver at builde....

SqlCommand PageTextCmd = new SqlCommand("ViewPageTexts", ConnStr);
Avatar billede lgy Nybegynder
29. november 2002 - 13:29 #5
Hvilken build fejl får du?
Avatar billede misbruger Nybegynder
29. november 2002 - 14:08 #6
The best overloaded method match for 'System.Data.SqlClient.SqlCommand.SqlCommand(string, System.Data.Sql.Client.SqlConnection)' has some invalide arguments
Avatar billede lgy Nybegynder
29. november 2002 - 14:21 #7
For at angive en SP skal du have [] rundt om strengen -

SqlCommand PageTextCmd = new SqlCommand("[ViewPageTexts]", ConnStr);

Lars
Avatar billede misbruger Nybegynder
29. november 2002 - 14:35 #8
Hmm jeg får den samme fejl besked?
Avatar billede misbruger Nybegynder
29. november 2002 - 14:37 #9
Min SP...

CREATE PROCEDURE ViewPageTexts (
  @Language INT,
  @PageName CHAR
)
AS
SELECT [dbo].[PageText].[Field], [dbo].[PageText].[Text]
FROM [dbo].[PageText]
WHERE PageName = @PageName
AND Language = @Language
AND Status = 1
GO
Avatar billede z42cool Nybegynder
29. november 2002 - 17:08 #10
Det har intet med din stored procedure at gøre. Hvis du læser dokumentationen for SqlCommand, så er der ingen constructor der tager to strenge som argumenter, men derimod en der tager en streng og en SqlConnection. Det du skal gøre er....

SqlConnection connection = new SqlConnection(dinConnnectionStrengHer);
SqlCommand command = new SqlCommand("ViewPageTexts", connection);
Avatar billede misbruger Nybegynder
29. november 2002 - 18:03 #11
/*
Du har ganske ret, jeg glemte at instatiere min connection string som en SqlConnection
Her er hvad jeg har gjort....
*/

private static string ConnStr = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"];

public static DataSet getTexts(int Language, string PageName)
{
    SqlConnection Conn = new SqlConnection(ConnStr);
   
    DataSet ds = new DataSet();
   
    SqlCommand PageTextCmd = new SqlCommand("[getPageTexts]", Conn);
    PageTextCmd.CommandType = CommandType.StoredProcedure;
    PageTextCmd.Parameters.Add("@Language", SqlDbType.Int).Value = Language;
    PageTextCmd.Parameters.Add("@PageName", SqlDbType.Char).Value = PageName;

    Conn.Open();
   
    SqlDataAdapter da = new SqlDataAdapter(PageTextCmd);
   
    Conn.Close();
   
    return ds;
}

/*
Tak for hjælpen!

Kan du eventuelt guide mig i en ordenlig exception håndtering i ovenstående?
(Jeg er stadig grøn! :)
*/
Avatar billede misbruger Nybegynder
29. november 2002 - 18:05 #12
Forresten points til dig 'z42cool' ! Tak!
Avatar billede mufoxe Nybegynder
30. november 2002 - 13:01 #13
Jeg smider normalt en Try Catch udenom open delen.

Jeg bruger Finally til at smide Command objektet (cmd.Dispose) væk og lukke forbindelsen igen.
Avatar billede misbruger Nybegynder
30. november 2002 - 13:19 #14
/*
Jeg havde forstillt mig....
*/

private static string ConnStr = System.Configuration.ConfigurationSettings.AppSettings["ConnStr"];

public static DataSet getTexts(int Language, string PageName)
{
    try
    {
        SqlConnection Conn = new SqlConnection(ConnStr);
   
        DataSet ds = new DataSet();
   
        SqlCommand PageTextCmd = new SqlCommand("[getPageTexts]", Conn);
        PageTextCmd.CommandType = CommandType.StoredProcedure;
        PageTextCmd.Parameters.Add("@Language", SqlDbType.Int).Value = Language;
        PageTextCmd.Parameters.Add("@PageName", SqlDbType.Char).Value = PageName;

        Conn.Open();
   
        SqlDataAdapter da = new SqlDataAdapter(PageTextCmd);
    }
    catch (Exception e)
    {
        // do something
        string exceptionCaught = e.ToString();
    }
    Finally
    {
        PageTextCmd.Dispose();
        Conn.Close();
    }
    return ds;
}

/*
Men er ikke helt sikker???
*/
Avatar billede mufoxe Nybegynder
30. november 2002 - 20:57 #15
Præcist. Jeg bruger dog normalt en Trace.Write i catch-delen. Enten det eller smider jeg fejlen ned i database, det gør det nemmere at konstere fejl.
Avatar billede misbruger Nybegynder
02. december 2002 - 10:13 #16
Tjo... Min ide var sådan set at vise brugeren er venlig fejlside, smide fejlen i db, og en sende mig en email.
Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester