2016-04-14 5 views
1

Aufruf der Sproc funktioniert gut, aber ich kann nicht scheinen, um einen Parameter zu übergeben. Es funktioniert wie erwartet im Azure-Portal, aber nicht beim Aufruf von .net.Rufen Sie DocumentDb gespeicherte Prozedur von .Net mit Parametern auf.

documentClient = new DocumentClient(new Uri(endpointUrl), authorizationKeyAdmin); 
var sproc = documentClient.CreateStoredProcedureQuery(_companyCollection.StoredProceduresLink, "select * from root r where r.id = \"testSproc\""); 
var result = documentClient.ExecuteStoredProcedureAsync<string>("dbs/GypNAB==/colls/GxpNAKrZMwA=/sprocs/GxpNAKrZMwxxxxAAAAAAAgA==/", sproc, "MyParameter"); 

Die sproc hat sich nicht wirklich verändert

function sample(rrid) { 
    var collection = getContext().getCollection(); 
    // Query documents and take 1st item. 
    var isAccepted = collection.queryDocuments(
     collection.getSelfLink(), 
     'SELECT top 1 * FROM c where c.RRID = "'+rrid+'"', 
     function (err, feed, options) { 
      if (err) throw err; 

      // Check the feed and if empty, set the body to 'no docs found', 
      // else take 1st element from feed 
      if (!feed || !feed.length) getContext().getResponse().setBody(rrid + 'no docs found!'); 
      else getContext().getResponse().setBody(JSON.stringify(feed[0])); 
     }); 

    if (!isAccepted) throw new Error('The query was not accepted by the server.'); 
} 

Die Ausgabe, wenn sie von .net namens "gefunden [object Object] keine docs!" Ich würde erwarten, dass [Object Object] mein Parameterwert ist. Wenn ich die Parameterbeschränkung entferne, bekomme ich ein korrektes Ergebnis zurück. Auch wenn ich es mit dem Parameter in azurblau benutze, bekomme ich ein korrektes Ergebnis zurück.

Vielen Dank für die Zeit.

Antwort

1

Der zweite Parameter für ExecuteStoredProcedureAsync() (sproc) mit dem ersten Parameter in der gespeicherten Prozedur abgebildet - weshalb ist die rrid als [object Object] in der Ausgabe zeigen nach oben.

Try running:

var result = documentClient.ExecuteStoredProcedureAsync<string>("dbs/GypNAB==/colls/GxpNAKrZMwA=/sprocs/GxpNAKrZMwxxxxAAAAAAAgA==/", "MyParameter"); 
+0

Ug, thanx. Ich vermute, dass ich meinen Code auf ein schlechtes Beispiel gestützt habe. Vielleicht kannst du es dann erklären, ich habe ein paar Beispiele gesehen, die erst * aus Sproc-Namen auswählen. Soll das verwendet werden, um die Sproc-ID herauszubekommen, oder wozu dient das? – VirtualLife

+1

Als DocumentDB veröffentlicht wurde, mussten alle Ressourcen durch eine vom System generierte "_self" -Links referenziert werden ... möglicherweise basieren ältere Samples darauf. Vor etwa einem halben Jahr wurde das Routing mit einer benutzerdefinierten ID durchgeführt, die die Abfrage von Ressourcen per ID überflüssig macht. –