2016-07-15 11 views
0

Ich weiß nicht, wie Wert Rückgabe von gespeicherten Prozedur in Web API zuweisen? wie Variablen übergeben througn angulrjsWie wird eine Variable zugewiesen?

I serivice

var promisePost = crudService.candidatePost(Candidates); 
      promisePost.then(function (pl) { 
       alert("Sucessfully Inserted") 

      }, function (err) { 
       alert("NOt Inserted") 
      }); 

mein app.js ist

MyApp.service('crudService', function ($http, RESOURCES) { 
this.candidatePost = function (Candidate) { 
    var request = $http({ 
     method: "post", 
     url: RESOURCES.baseUrl + "saveCandidate", 
     data: Candidate 
    }); 
    return request; 
} 

}) genannt; mein Controller ist

[HttpPost] 
    [Route("api/saveCandidate")] 

    public HttpResponseMessage AddDetail(Candidate ct) 
    { 
     SqlConnection con = new SqlConnection(Constant.ConnectionString); 
     SqlCommand cmd = new SqlCommand(); 
     int rowInserted = 0; 

     try 
     { 

      cmd = new SqlCommand("sp_Insert_tblCandidate", con); 
      con.Open(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@Name", ct.Name); 
      cmd.Parameters.AddWithValue("@Gender", ct.Gender); 
      cmd.Parameters.AddWithValue("@Dob", ct.Dob); 
      cmd.Parameters.AddWithValue("@Mob", ct.Mob); 
      cmd.Parameters.AddWithValue("@EntryDate", ct.EntryDate); 
      cmd.Parameters.AddWithValue("@Note", ct.Note); 
      cmd.Parameters.AddWithValue("@Emial", ct.Emial); 
      cmd.Parameters.AddWithValue("@Address", ct.Address); 
      rowInserted = cmd.ExecuteNonQuery(); 
       con.Close(); 
     } 
     catch (Exception obj) 
     { 
      if (rowInserted != 1) 
      { 
       var message = obj.Message;// string.Format("Insertion Of Data is not Succefully Executed"); 
       HttpError err = new HttpError(); 
       return Request.CreateResponse(HttpStatusCode.NotFound, err); 

      } 
     } 
     finally 
     { 
      if (con.State == System.Data.ConnectionState.Open) 
      { 

       con.Close(); 
      } 
     } 
     var alertmessage = string.Format("Insertion Of Data is Succefully Executed"); 
     return Request.CreateResponse(HttpStatusCode.OK, alertmessage); 

    } 

Meine gespeicherten Prozedur ist

IF EXISTS (SELECT * 
     FROM sysobjects 
     WHERE id = object_id(N'[dbo].[sp_Insert_tblCandidate]') 
       and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
BEGIN 
DROP PROCEDURE [dbo].[sp_Insert_tblCandidate] 
END 

GO 
Create procedure [dbo].[sp_Insert_tblCandidate] 
    (@Name varchar(50) , 
    @Gender char(1), 
    @dob varchar(25), 
    @Mob varchar(15), 
    @EntryDate varchar(50), 
    @Note varchar(100), 
    @Emial varchar(50), 
    @Address varchar(50) 
)As 
Begin 
INSERT INTO [dbo].[tblCandidate] VALUES (@Name,@Gender,@dob,@Mob,@EntryDate,@Note,@Emial,@Address); 
SELECT SCOPE_IDENTITY() as CandidateId; 
end 
GO 

Meine gespeicherten Prozedur Zweck Einsatzdaten & zurückkehren zuletzt eingefügt ID. In dieser Tabelle ID festgelegt auf Auto Inkrement. Kann mir jemand helfen?

+0

Ihre Frage macht keinen Sinn - AngularJS ist eine clientseitige Sprache, jedes Gespräch mit Datenbanken muss über einen serverseitigen Controller wie ASP.NET oder Grails etc. erfolgen. – KaraokeStu

+0

ich benutze web api –

+0

Dann brauchen Sie um ein paar Dinge zu tun - 1. Rufen Sie ExecuteScalar auf, damit Sie die ID erhalten können. 2. Rufen Sie den WebAPI-Controller von Ihrem Winkelregler – KaraokeStu

Antwort

0

Sie kehren die neue Id so sollten Sie nicht

cmd.ExecuteNonQuery() 

Aber etwas mit, die den Rückgabewert verarbeiten kann. Versuchen Sie es zu

rowInserted = (int) cmd.ExecuteScalar(); 

ändert sich auch jetzt Sie die rowInserted im Fang sind Kontrolle, die nicht viel Sinn macht macht.

+0

wie id von storeprocedure zurückgegeben wird –

+0

Ihre Auswahl sollte es als eine Tabelle mit einer CandidateId Spalte zurückgeben. Sie können auch einfach folgendes tun: RETURN SCOPE_IDENTITY() – Juan

+0

Wie man zurückgegebene CandidateId einer Variablen zuweist? –

0

Sie können kein Ergebnis von ExecuteNonQuery() erhalten, da nur die Anzahl der betroffenen Zeilen für die gerade ausgeführte Abfrage zurückgegeben wird.

Da Sie SCOPE_IDENTITY() zurückgeben, können Sie entweder ExecuteReader() oder ExecuteScalar() verwenden.

rowInserted = (int)cmd.ExecuteScalar(); 

oder

using(SqlDataReader rdr = cmd.ExecuteReader()) 
{ 
    while(rdr.Read()) 
    { 
     rowInserted = Convert.ToInt32(rdr[0]); 
    } 
} 

Aber SqlDataReader verwendet, ist ein bisschen in diesem Szenario nicht erforderlich.

Plus, nur eine Beobachtung; Seien Sie vorsichtig bei der Wahl zwischen SCOPE_IDENTITY(), @@IDENTITY und IDENT_CURRENT.

Verwandte Themen