ড্যাপারের সাথে কোনও সঞ্চিত প্রক্রিয়া কল করার কোনও উপায় আছে কি?


205

স্ট্যাকওভারফ্লো ডটকমের জন্য ড্যাপার মাইক্রো ওআরএম এর ফলাফল নিয়ে আমি খুব অভিভূত । আমি এটি আমার নতুন প্রকল্পের জন্য বিবেচনা করছি এবং তবে আমার এক উদ্বেগ আছে যে আমার প্রকল্পটির কিছু সময় স্টোরড পদ্ধতি থাকা দরকার এবং আমি ওয়েবে প্রচুর অনুসন্ধান করেছি কিন্তু সঞ্চিত প্রক্রিয়া সহ কিছুই পাইনি। তাহলে কোনও স্টোরেজ পদ্ধতিতে ড্যাপারের কাজ করার কোনও উপায় আছে কি?

এটি সম্ভব হলে দয়া করে আমাকে জানান দয়া করে অন্যথায় আমার পথে এটি প্রসারিত করতে হবে।


উত্তর:


356

সাধারণ ক্ষেত্রে আপনি এটি করতে পারেন:

var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
        commandType: CommandType.StoredProcedure).First();

আপনি যদি আরও অভিনব কিছু চান তবে আপনি এটি করতে পারেন:

 var p = new DynamicParameters();
 p.Add("@a", 11);
 p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
 p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

 cnn.Execute("spMagicProc", p, commandType: CommandType.StoredProcedure); 

 int b = p.Get<int>("@b");
 int c = p.Get<int>("@c"); 

অতিরিক্তভাবে আপনি একটি ব্যাচে এক্সিকিউট ব্যবহার করতে পারেন, তবে এটি আরও জটিল।


1
রিটার্নভ্যালুর দিকের প্যারামিটারটি প্রথমে সংজ্ঞায়িত করা উচিত, তাই না?
এন্ডে তজাহোনো

3
@ স্যাম জাফরান .আউটপুট এবং। রিটার্নভ্লেউয়ের মধ্যে পার্থক্য কী?
নিরবধি

স্যাম, এটি কি এসপিআরওসি থেকে ফলাফল নির্ধারণের অনুমতি দেয়?
ব্র্যাড

2
আমি একটি দৃশ্য পেয়েছি যেখানে আমি কোয়েরির ফলাফল সেট এবং একটি পদ্ধতিতে আউটপুট প্যারামিটার মান গ্রহণ করব। আমি যদি ব্যবহার করি তবে আমি cnn.Query<MyType>কীভাবে প্রোকের আউটপুট প্যারামিটারের মান পেতে পারি?
মুরালি মুরুগেসন

দ্বিতীয় (অভিনব) সমাধানটি যখন আপনাকে এক বা একাধিক সঞ্চিত প্রক্রিয়া পরামিতিগুলির জন্য নাল মান পাস করতে হয় তার জন্যও সহায়ক।
রিকার্ডো সানচেজ

13

আমি মনে করি উত্তরটি সঞ্চিত পদ্ধতির কোন বৈশিষ্ট্যগুলি আপনাকে ব্যবহার করতে হবে তার উপর নির্ভর করে।

ফলাফল সেট ফেরত সঞ্চিত পদ্ধতি ব্যবহার করে চালানো যেতে পারে Query; সঞ্চিত পদ্ধতি যা ফলাফল সেট ফেরত দেয় না তা ব্যবহার করে চালানো যেতে পারে Execute- উভয় ক্ষেত্রেই (ব্যবহার করে EXEC <procname>) এসকিউএল কমান্ড হিসাবে (প্রয়োজনীয় হিসাবে ইনপুট পরামিতি)। আরও বিশদ জন্য ডকুমেন্টেশন দেখুন ।

সংশোধন 2d128ccdc9a2 হিসাবে OUTPUTপরামিতিগুলির জন্য স্থানীয় সমর্থন বলে মনে হয় না ; আপনি এটি যুক্ত করতে পারেন, বা বিকল্পভাবে আরও জটিল Queryকমান্ড তৈরি করতে পারেন যা টিএসকিউএল ভেরিয়েবল ঘোষণা করে, এসপি OUTPUTস্থানীয় ভেরিয়েবলগুলিতে সংগ্রহের প্যারামিটার কার্যকর করে এবং ফলস্বরূপ সেগুলিতে পুনরায় তৈরি করে:

DECLARE @output int

EXEC <some stored proc> @i = @output OUTPUT

SELECT @output AS output1

17
এখনই আউটপুট প্যারামের জন্য সমর্থন যোগ করেছেন, আমার সর্বশেষ চেকিনটি দেখুন
স্যাম সাফ্রন

6
@ সাম - এটাকেই আমি পরিষেবা বলি!
এড হার্পার

6

স্টোর পদ্ধতি থেকে মান ফেরত পাওয়ার জন্য এখানে কোড

সংরক্ষিত নীতিমালা:

alter proc [dbo].[UserlogincheckMVC]    
@username nvarchar(max),    
@password nvarchar(max)
as    
begin    
    if exists(select Username from Adminlogin where Username =@username and Password=@password)    
        begin        
            return 1  
        end    
    else    
        begin     
            return 0  
        end    
end 

কোড:

var parameters = new DynamicParameters();
string pass = EncrytDecry.Encrypt(objUL.Password);
conx.Open();
parameters.Add("@username", objUL.Username);
parameters.Add("@password", pass);
parameters.Add("@RESULT", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
var RS = conx.Execute("UserlogincheckMVC", parameters, null, null, commandType: CommandType.StoredProcedure);
int result = parameters.Get<int>("@RESULT");

2

উপরে থেকে একই, আরও বিস্তৃত

নেট কোর ব্যবহার

নিয়ামক

public class TestController : Controller
{
    private string connectionString;

    public IDbConnection Connection
    {
        get { return new SqlConnection(connectionString); }
    }

    public TestController()
    {
        connectionString = @"Data Source=OCIUZWORKSPC;Initial Catalog=SocialStoriesDB;Integrated Security=True";
    }

    public JsonResult GetEventCategory(string q)
    {
        using (IDbConnection dbConnection = Connection)
        {
            var categories = dbConnection.Query<ResultTokenInput>("GetEventCategories", new { keyword = q },
    commandType: CommandType.StoredProcedure).FirstOrDefault();

            return Json(categories);
        }
    }

    public class ResultTokenInput
    {
        public int ID { get; set; }
        public string name { get; set; }            
    }
}

সঞ্চিত পদ্ধতি (পিতামাতার সন্তানের সম্পর্ক)

create PROCEDURE GetEventCategories
@keyword as nvarchar(100)
AS
    BEGIN

    WITH CTE(Id, Name, IdHierarchy,parentId) AS
    (
      SELECT 
        e.EventCategoryID as Id, cast(e.Title as varchar(max)) as Name,
        cast(cast(e.EventCategoryID as char(5)) as varchar(max)) IdHierarchy,ParentID
      FROM 
        EventCategory e  where e.Title like '%'+@keyword+'%'
     -- WHERE 
      --  parentid = @parentid

      UNION ALL

      SELECT 
        p.EventCategoryID as Id, cast(p.Title + '>>' + c.name as varchar(max)) as Name,
        c.IdHierarchy + cast(p.EventCategoryID as char(5)),p.ParentID
      FROM 
        EventCategory p 
      JOIN  CTE c ON c.Id = p.parentid

        where p.Title like '%'+@keyword+'%'
    )
    SELECT 
      * 
    FROM 
      CTE
    ORDER BY 
      IdHierarchy

ক্ষেত্রে রেফারেন্স

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using SocialStoriesCore.Data;
using Microsoft.EntityFrameworkCore;
using Dapper;
using System.Data;
using System.Data.SqlClient;

কেন ব্যবহার করছেন Microsoft.EntityFrameworkCore? শুধু ব্যবহার ড্যাপার মধ্যে ডাল ?
প্রিগ্যান্টকোজোনিরো ক্যাব্রন

@ প্রিগ্যান্টকোজনো ক্যাব্রোন দরকার নেই, আমি কেবল সমস্ত কিছু পেস্ট করেছি
অরুণ প্রসাদ ইএস

ইভেন্ট ক্যাটাগরির জন্য সারি নমুনা?
কিকিনেট

অরুনপ্রসাদ প্রিগুন্টনকোজোনেরো ক্যাব্রিন পয়েন্টে, দয়া করে সাফ করুন এবং অপ্রয়োজনীয় কোডটি সরিয়ে দিন কারণ এটি কোনও সমস্যার সমাধান করার চেষ্টা করা লোককে বিভ্রান্ত করে। ভিজ্যুয়াল স্টুডিও এবং রিশার্পারে বৈশিষ্ট্য রয়েছে যা এটি আপনার জন্য ক্লিনআপ ব্যবহার করে।
কিউবিকল.জকি

1

একাধিক রিটার্ন এবং মাল্টি প্যারামিটার সহ

string ConnectionString = CommonFunctions.GetConnectionString();
using (IDbConnection conn = new SqlConnection(ConnectionString))
{
    IEnumerable<dynamic> results = conn.Query(sql: "ProductSearch", 
        param: new { CategoryID = 1, SubCategoryID="", PageNumber=1 }, 
        commandType: CommandType.StoredProcedure);.  // single result

    var reader = conn.QueryMultiple("ProductSearch", 
        param: new { CategoryID = 1, SubCategoryID = "", PageNumber = 1 }, 
        commandType: CommandType.StoredProcedure); // multiple result

    var userdetails = reader.Read<dynamic>().ToList(); // instead of dynamic, you can use your objects
    var salarydetails = reader.Read<dynamic>().ToList();
}

public static string GetConnectionString()
{
    // Put the name the Sqlconnection from WebConfig..
    return ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
}

পণ্য অনুসন্ধানের নমুনা ? 2 টি কার্সার ফিরিয়ে দেয়?
PreguntonCojoneroCabrón

0
public static IEnumerable<T> ExecuteProcedure<T>(this SqlConnection connection,
    string storedProcedure, object parameters = null,
    int commandTimeout = 180) 
    {
        try
        {
            if (connection.State != ConnectionState.Open)
            {
                connection.Close();
                connection.Open();
            }

            if (parameters != null)
            {
                return connection.Query<T>(storedProcedure, parameters,
                    commandType: CommandType.StoredProcedure, commandTimeout: commandTimeout);
            }
            else
            {
                return connection.Query<T>(storedProcedure,
                    commandType: CommandType.StoredProcedure, commandTimeout: commandTimeout);
            }
        }
        catch (Exception ex)
        {
            connection.Close();
            throw ex;
        }
        finally
        {
            connection.Close();
        }

    }
}

var data = db.Connect.ExecuteProcedure<PictureModel>("GetPagePicturesById",
    new
    {
        PageId = pageId,
        LangId = languageId,
        PictureTypeId = pictureTypeId
    }).ToList();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.