Avatar billede gulbaek Nybegynder
10. juli 2006 - 15:49 Der er 13 kommentarer og
1 løsning

Returner andet end DataSet fra Sql server 2005 evt. Generic Liste

Er ved at udvikle en hjemmeside og er støt på et problem, har en Sql CLR i sql server 2005 hvor min kode ser således ud.

[SqlProcedure]
    public static void SelectArticleByTitel(string MyTitle)
    {
        string sql = "SELECT *" +
                    "FROM Article" +
                    "WHERE Title = '" + @MyTitle + "'";

        using (SqlConnection sqlConnection = new SqlConnection("context connection = true"))
        {
            sqlConnection.Open();
            SqlPipe sqlPipe = SqlContext.Pipe;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText = sql;
            SqlParameter parameterWikiTitle = new SqlParameter("@MyTitle", SqlDbType.VarChar, 255);
            parameterWikiTitle.Direction = ParameterDirection.Input;
            parameterWikiTitle.Value = MyTitle;
            sqlCommand.Parameters.Add(parameterWikiTitle);
            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
            sqlPipe.Send(sqlDataReader);
        }
    }

Umiddelbart virker den fint, men kan man ikke undgå at få returneret et DataSet, da jeg ved at den kun vil returnere et enkelt resultat.

Evt. er der en måde hvor ved man kan få en generic liste i stedet for.
Avatar billede arne_v Ekspert
10. juli 2006 - 15:51 #1
Du kan returnere data fra en SP paa 3 maader:

- output parameter
- return value
- result set

Hvis du ikke kan lide den sidste sa avaleg en af de 2 foerste.

Men jeg kan nu ikke se problemet med et result set da ExecuteScalar jo
eksisterer netop for at hente kun en vaerdi ud.
Avatar billede arne_v Ekspert
10. juli 2006 - 15:52 #2
... saa vaelg ...
Avatar billede gulbaek Nybegynder
10. juli 2006 - 16:01 #3
Takker, havde ikke lige opdaget den med Scalar, findes der så en smart måde at omforme resultatet til en generic liste?  eller er det bare spild af arbejde.
Avatar billede arne_v Ekspert
10. juli 2006 - 16:05 #4
det er ikke spild af arbejde

til stoerre projekter vil jeg endda sige at det er en god ide at transformere
fra data reader til en type safe collection af egen klasse (og det er jo blevet
noget nemmere med .NET 2.0 generics)

men jeg kender ikke lige et godt alternativ til en while loekke somm adder til listen
Avatar billede segato Nybegynder
10. juli 2006 - 19:06 #5
At løbe igennem en reader og ud fra det generere sin egen collection er jo ik så anderledes end det .NET gør nede bagi når du får et DataSet. Personligt foretrækker jeg os selv den metode du skal dog være opmærksom på hvis du vil binde dataerne til en datagrid kan der godt være en del kode, med henblik på sortering samt en masse andre ting.
Avatar billede gulbaek Nybegynder
10. juli 2006 - 20:31 #6
Syntes bare der ligger utrolig meget arbejde i det, da jeg allerede ved at jeg kun skal hente et artikel object ud ad gangen.

Kommer til at fungere på følgende måde, brugeren indtaster en url.  www.mysite.dk/myArticle.aspx Så bruger jeg ellers lidt url rewriting til at finde udaf at den skal loade min side med artiklen "myArticle" 
Men det kan da godt ske at jeg bare må lære at leve med et DataSet.
Avatar billede arne_v Ekspert
11. juli 2006 - 01:31 #7
Det er efter min mening OK med:

public X GetOne(int id)
public IList<X> GetAll()

således at man skipper collection når man ved det er et enkelt objekt
Avatar billede segato Nybegynder
11. juli 2006 - 11:57 #8
Ja helt enig med Arne. Hvis det kun er scalar data returnere man selvfølge bare en scalar.
Avatar billede gulbaek Nybegynder
15. juli 2006 - 17:19 #9
arne_v du kan vel ikke komme med at hurtigt eksempel på hvordan man transformere fra data reader til en type safe collection? og beklager jeg har været lidt længe om at svare tilbage.
Avatar billede arne_v Ekspert
15. juli 2006 - 17:35 #10
lige ud af landevejen:

while(rdr.Read())
{
    col.Add(new X(rdr.GetInt32(0), rdr.GetString(1), rdr.GetString(2));
}
Avatar billede gulbaek Nybegynder
16. juli 2006 - 10:33 #11
Takker for hjælpen, arne_v og segato smider i ikke lige et svar
Avatar billede arne_v Ekspert
16. juli 2006 - 15:43 #12
kommer her
Avatar billede segato Nybegynder
16. juli 2006 - 21:10 #13
Giv dem til arne han samler. Jeg er bare nyskerrig :D
Avatar billede gulbaek Nybegynder
17. juli 2006 - 14:20 #14
bare helt iorden segato :-)
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