Estoy creando una Web API que acepta dos parámetros de entrada llamada ACC. Crea un procedimiento almacenado para insertar o actualizar la tabla de la Cuenta en el servidor SQL server. Cuenta mesa tiene sólo dos campos AccountID de tipo nvarchar(50) (primaryKey) y Cnt int

 CREATE PROCEDURE [dbo].[usp_InserUpadte] 
 @Account_TT AS Account_TT READONLY

 AS
 BEGIN
 SET NOCOUNT ON;

 BEGIN TRANSACTION;

 MERGE dbo.[Account] prj
 USING @Account_TT tt
 ON prj.AccountID = tt.AccountID
 WHEN MATCHED THEN UPDATE SET prj.Cnt = prj.Cnt+1
 WHEN NOT MATCHED THEN INSERT (AccountID,Cnt)
 VALUES (tt.AccountID, 1);

 COMMIT TRANSACTION;

Ahora me trató de conectarse a SQL server no está seguro de cómo iba yo a llamar al procedimiento almacenado en la ASP.NET API Web de la aplicación y pasar el ID de la Cuenta en para crear o updadte la tabla

namespace WebService.Controllers
{
public class CreationController : ApiController
{
    [HttpGet]
    public HttpResponseMessage Get(string ACC)
    {
        string strcon =  System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
        SqlConnection DbConnection = new SqlConnection(strcon);

Sé que podemos llamar la consulta directamente como

var strQuery = "SELECT * from ACCOUNT where ACC = :ACC"

Pero no sé cómo llamar a la anterior procedimiento almacenado y pasar el Valor de la Cuenta. Cualquier ayuda es muy apreciada.

  • Quieres pasar Account_TT tabla para su tienda procedimiento como parámetro?
  • Gracias @Saadi, pero no sé cómo se llama al procedimiento Almacenado dentro de mi aplicación
  • Mira en este enlace por favor: stackoverflow.com/questions/4259989/…
  • He creado la Cuenta de tabla con dos campos AccountID de tipo nvarchar(50) (primaryKey) y Cnt int. y yo trato de ejecutar su tienda procedimiento de consulta, pero no la ejecución.
  • ¿Crear una tabla escriba Account_TT ?
  • Por favor, comparta consulta de tabla escriba Account_TT.
  • — Crear el tipo de datos CREATE TYPE Account_TT AS TABLE ( AccountID nvarchar(50) ) GO
  • Ok. He publicado mi respuesta.
  • Permítanos continuar esta discusión en el chat.

InformationsquelleAutor trx | 2016-12-21

2 Comentarios

  1. 5

    Aquí es el ejemplo de trabajo.
    Por favor, eche un vistazo en él.

    string strcon = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
    SqlConnection DbConnection = new SqlConnection(strcon);
    DbConnection.Open();
    SqlCommand command = new SqlCommand("[dbo].[usp_InserUpadte]", DbConnection);
    command.CommandType = CommandType.StoredProcedure;
    
    //create type table
    DataTable table = new DataTable();
    table.Columns.Add("AccountID", typeof(string));
    table.Rows.Add(ACC);
    
    SqlParameter parameter = command.Parameters.AddWithValue("@Account_TT", table);
    parameter.SqlDbType = SqlDbType.Structured;
    parameter.TypeName = "Account_TT";
    command.ExecuteNonQuery();
    DbConnection.Close();
    • Recomendación: Utilizar el manejo de excepciones para este código. Gracias!
    • Saadi. He probado a ejecutar por el paso de un valor para la ACC en la Web de la API no a través de cualquier excepción, pero no crea ningún registro en la base de datos. No estoy seguro de lo que me estoy perdiendo
  2. 2

    Para llamar a un procedimiento almacenado que usted necesita para utilizar un SqlCommand algo como esto:

    string strcon =  System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString;
    using (var connection = new SqlConnection(strcon)) {
        using (var command = new SqlCommand("usp_InserUpadte", connection)) {
          command.CommandType = CommandType.StoredProcedure;
          command.Parameters.Add("@Account_TT ", SqlDbType.NVarChar).Value = ACC;
          command.Open();
          var reader = command.ExecuteReader();
    
          //Handle return data here
        }
      }

Dejar respuesta

Please enter your comment!
Please enter your name here