Avatar billede irsild Nybegynder
14. april 2004 - 11:54 Der er 9 kommentarer og
2 løsninger

problemer med webservice i webmatrix

Hej. Jeg prøver at lave en metode i webmatrix, der returner System.Data.SqlClient.SqlDataReader. Men i stedet returner den System.Data.IDataReader, som giver problemer: "Cannot serialize interface System.Data.IDataReader". Jeg bruger Matrix til at lave metoden. Hvad kan jeg gøre?

[WebMethod]
    public System.Data.IDataReader MyQueryMethod() {
        string connectionString = "server=\'sqlsrv\'; trusted_connection=true; database=\'book\'";
        System.Data.IDbConnection dbConnection = new System.Data.SqlClient.SqlConnection(connectionString);

        string queryString = "SELECT [Room].[RoomType], [Room].[RoomPrice] FROM [Room], [Hotel] WHERE (([Hotel]" +
".[Id] = [Room].[HotelId]) AND ([Hotel].[Id] = 1))";
        System.Data.IDbCommand dbCommand = new System.Data.SqlClient.SqlCommand();
        dbCommand.CommandText = queryString;
        dbCommand.Connection = dbConnection;

        dbConnection.Open();
        System.Data.IDataReader dataReader = dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

        return dataReader;
    }
Avatar billede burningice Nybegynder
14. april 2004 - 12:01 #1
du har vel for søren selv skrevet scriptet? Så har du jo også selv valgt at den skal returnere en IDataReader istedet for SqlDataReader?

public SqlDataReader MyQueryMethod() {
        string connectionString = "server=\'sqlsrv\'; trusted_connection=true; database=\'book\'";
        SqlConnection dbConnection = new System.Data.SqlClient.SqlConnection(connectionString);

        string queryString = "SELECT [Room].[RoomType], [Room].[RoomPrice] FROM [Room], [Hotel] WHERE (([Hotel]" +
".[Id] = [Room].[HotelId]) AND ([Hotel].[Id] = 1))";
        SqlCommand dbCommand = new System.Data.SqlClient.SqlCommand();
        dbCommand.CommandText = queryString;
        dbCommand.Connection = dbConnection;

        dbConnection.Open();
        return  dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
Avatar billede irsild Nybegynder
14. april 2004 - 12:03 #2
Nej. webmatrix laver det hele for mig. Jeg kan vælge mellem at returner System.Data.DataSet  eller System.Data.SqlClient.SqlDataReader. Hvis jeg vælger System.Data.SqlClient.SqlDataReader laver den i stedet oven stående metode
Avatar billede irsild Nybegynder
14. april 2004 - 12:14 #3
Nu har jeg så selv lavet dette, men får en fejl " Object reference not set to an instance of an object."

[WebMethod]
    public System.Data.SqlClient.SqlDataReader MyQueryMethod() {
        string connectionString = "server=\'sqlsrv\'; trusted_connection=true; database=\'book\'";
        System.Data.SqlClient.SqlConnection dbConnection = new System.Data.SqlClient.SqlConnection(connectionString);

        string queryString = "SELECT [Room].[RoomType], [Room].[RoomPrice] FROM [Room], [Hotel] WHERE (([Hotel]" +
".[Id] = [Room].[HotelId]) AND ([Hotel].[Id] = 1))";
        System.Data.SqlClient.SqlCommand dbCommand = new System.Data.SqlClient.SqlCommand();
        dbCommand.CommandText = queryString;
        dbCommand.Connection = dbConnection;

        dbConnection.Open();
        return  dbCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
Avatar billede burningice Nybegynder
14. april 2004 - 12:17 #4
arg.. ja... autogeneret kode... :/ det eneste VS skal gøre er at skrive de skide koordinater når kontroller skal placeres på en form, resten skal den ikke blande sig i :)

well, får du ikke et linje nr?
Avatar billede irsild Nybegynder
14. april 2004 - 12:22 #5
Nej, ikke noget linienr.


men b.la dette:

Stack Trace:


[NullReferenceException: Object reference not set to an instance of an object.]
  System.Xml.Serialization.XmlAttributes..ctor(ICustomAttributeProvider provider) +109
  System.Xml.Serialization.TypeScope.GetEnumeratorElementType(Type type) +109
  System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type, Boolean canBePrimitive, MemberInfo memberInfo) +1536
  System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean directReference) +51
  System.Xml.Serialization.XmlReflectionImporter.ImportMemberMapping(XmlReflectionMember xmlReflectionMember, String ns, XmlReflectionMember[] xmlReflectionMembers) +35
  System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement) +322
Avatar billede burningice Nybegynder
14. april 2004 - 12:53 #6
hm.. ja, det får man ikke så meget ud af... har du tjekket om man kan Serialisere en SqlDataReader?
Avatar billede irsild Nybegynder
14. april 2004 - 13:05 #7
Du har nok ret i at man ikke kan serializer en SqlDataReader:
public sealed class SqlDataReader : MarshalByRefObject,
  IEnumerable, IDataReader, IDisposable, IDataRecord
Avatar billede burningice Nybegynder
14. april 2004 - 13:14 #8
ser sådan ud... hent istedet dine data ud i en datatable og send den... det går lidt nemmere :)
Avatar billede irsild Nybegynder
14. april 2004 - 13:23 #9
Ja, eller et ArrayListe, det må jeg lige se på.  Men jeg ved så ikke hvad det er WebMatrix prøver på men den kode den laver?
Avatar billede irsild Nybegynder
14. april 2004 - 15:47 #10
ok. cyberfessor. Lad os dele point :)
Avatar billede burningice Nybegynder
14. april 2004 - 16:19 #11
:) fair nok
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