সি # প্রোগ্রামের মধ্যে কীভাবে একটি সঞ্চিত পদ্ধতি কার্যকর করা যায়


254

আমি একটি সি # প্রোগ্রাম থেকে এই সঞ্চিত পদ্ধতিটি কার্যকর করতে চাই।

আমি নিম্নলিখিত স্কোর সার্ভারের ক্যোয়ারী উইন্ডোতে সঞ্চিত পদ্ধতিটি লিখেছি এবং এটি সংরক্ষিত 1 হিসাবে সংরক্ষণ করেছি:

use master 
go
create procedure dbo.test as

DECLARE @command as varchar(1000), @i int
SET @i = 0
WHILE @i < 5
BEGIN
Print 'I VALUE ' +CONVERT(varchar(20),@i)
EXEC(@command)
SET @i = @i + 1
END

সম্পাদিত:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace AutomationApp
{
    class Program
    {
        public void RunStoredProc()
        {
            SqlConnection conn = null;
            SqlDataReader rdr  = null;

            Console.WriteLine("\nTop 10 Most Expensive Products:\n");

            try
            {
                conn = new SqlConnection("Server=(local);DataBase=master;Integrated Security=SSPI");
                conn.Open();
                SqlCommand cmd = new SqlCommand("dbo.test", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                rdr = cmd.ExecuteReader();
                /*while (rdr.Read())
                {
                    Console.WriteLine(
                        "Product: {0,-25} Price: ${1,6:####.00}",
                        rdr["TenMostExpensiveProducts"],
                        rdr["UnitPrice"]);
                }*/
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                }
                if (rdr != null)
                {
                    rdr.Close();
                }
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            Program p= new Program();
            p.RunStoredProc();      
            Console.Read();
        }
    }
}

এটি ব্যতিক্রম প্রদর্শন করে Cannot find the stored procedure dbo.test। আমার কি পথ সরবরাহ করার দরকার আছে? যদি হ্যাঁ, সঞ্চিত পদ্ধতিগুলি কোন স্থানে সংরক্ষণ করা উচিত?


3
এমনকি পরীক্ষার জন্য মাস্টার ব্যতীত অন্য কোনও ডাটাবেস ব্যবহার করা ভাল। এটি একটি সিস্টেম ডাটাবেস এবং আপনার পরিণামে সমস্যা দেখা দেবে। এসকিউএল 2012 এ এটি আমাকে একটি টেবিল তৈরি করতে দেবে না। এটি বিপরীতভাবে আমাকে একটি স্প্রোক তৈরি করার অনুমতি দেবে। : /
— জো জনস্টন

তবুও উত্তর: আপনি কি পরীক্ষা করেছেন যে আপনার এসপি আসলে আপনার দেওয়া নাম দিয়ে তৈরি হয়েছিল (dbo.test)? আমি জানি না যদি কোনও ডি-ডিবিও ব্যবহারকারী ডিবি.এস্ট তৈরি করার চেষ্টা করে ... তবে কি এটি নন-ডিবিও.স্টেস্ট হিসাবে তৈরি করা হবে?
— DigCamara

5
@ বোবহান এই প্রশ্নটি আপনি জিজ্ঞাসা করেছেন যে এটি একটি সম্ভাব্য সদৃশ এর 2 বছর আগে জিজ্ঞাসা করা হয়েছিল। দয়া করে, ভবিষ্যতে, সর্বাধিক সাম্প্রতিক প্রশ্নটিকে সদৃশ হিসাবে চিহ্নিত করুন।
— রায়ানফায়েস্কটল্যান্ড

উত্তর:


333
using (var conn = new SqlConnection(connectionString))
using (var command = new SqlCommand("ProcedureName", conn) { 
                           CommandType = CommandType.StoredProcedure }) {
   conn.Open();
   command.ExecuteNonQuery();
}

51
এমনকি আপনি এ থেকে conn.CloseDispose
— মুক্তিও

16
এই ক্ষেত্রে এটি সত্য। আমি ম্যাচিং Openএবং Closeকল করতে পছন্দ করি । যদি আপনি বলেন, সংযোগটি ভবিষ্যতে ক্ষেত্র হিসাবে চিহ্নিত করুন এবং ব্যবহারের বিবৃতিটি সরিয়ে ফেলুন, আপনি দুর্ঘটনাক্রমে Closeকোনও সংযুক্তি যুক্ত করতে এবং একটি উন্মুক্ত সংযোগটি শেষ করতে ভুলে যেতে পারেন ।
— মেহরদাদ আফশারী

11
আপনি যদি কীভাবে এটি করতে পারেন যদি সঞ্চিত প্রকল্পের প্যারামিটারগুলির প্রয়োজন হয়? কমান্ড অবজেক্টে একই নাম এবং প্রকারের সাথে পরামিতিগুলি যুক্ত করতে চান?
— দানি 13

5
@ দানি হ্যাঁ অবজেক্টের Parametersসংগ্রহে প্যারামিটারগুলি যুক্ত করুন SqlCommand।
— মেহেরদাদ আফশারী

আমি কি এসপিতে ড্রপডাউন মান বিকল্পটি প্রেরণ করতে সক্ষম হব?
— সার্চফোরকনলজ

246
using (SqlConnection conn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI")) {
    conn.Open();

    // 1.  create a command object identifying the stored procedure
    SqlCommand cmd  = new SqlCommand("CustOrderHist", conn);

    // 2. set the command object so it knows to execute a stored procedure
    cmd.CommandType = CommandType.StoredProcedure;

    // 3. add parameter to command, which will be passed to the stored procedure
    cmd.Parameters.Add(new SqlParameter("@CustomerID", custId));

    // execute the command
    using (SqlDataReader rdr = cmd.ExecuteReader()) {
        // iterate through results, printing each to console
        while (rdr.Read())
        {
            Console.WriteLine("Product: {0,-35} Total: {1,2}",rdr["ProductName"],rdr["Total"]);
        }
    }
}

এখানে পড়তে পারেন এমন কিছু আকর্ষণীয় লিঙ্ক:


32
আপনার কীওয়ার্ডটি "ব্যবহার করে" সত্যিই ব্যবহার করা উচিত। কাঠামোর কাছে সেই উন্মুক্ত / ঘনিষ্ঠ দায়িত্বটিকে ঠেলাও।
— TruMan1

1
SqlCommand এর সংজ্ঞা: public sealed class SqlCommand : System.Data.Common.DbCommand, ICloneable, IDisposable। usingবিবৃতিতে রাখুন এটি পরিষ্কার করতে সহায়তা করবে।
— থিমফিল্ড

24

সি # তে কলিং স্টোর প্রক্রিয়া

    SqlCommand cmd = new SqlCommand("StoreProcedureName",con);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@value",txtValue.Text);
    con.Open();
    int rowAffected=cmd.ExecuteNonQuery();
    con.Close();

21
using (SqlConnection sqlConnection1 = new SqlConnection("Your Connection String")) {
using (SqlCommand cmd = new SqlCommand()) {
  Int32 rowsAffected;

  cmd.CommandText = "StoredProcedureName";
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Connection = sqlConnection1;

  sqlConnection1.Open();

  rowsAffected = cmd.ExecuteNonQuery();

}}

আমি কীভাবে সেমিডি.কম্যান্ডটেক্সট = "স্টোরডড 1" আমার সঞ্চিত পদ্ধতির ব্যাখ্যা করে তা নিয়ে আমি উদ্বিগ্ন I আমি জানি না।
— সুন্দর

2
"কমান্ডটেক্সট" অবশ্যই সঞ্চিত প্রক্রিয়াটির নাম NAME এ সেট করতে হবে, যা তখন সি # থেকে মৃত্যুদন্ড কার্যকর করা হয়েছিল যেন আপনি এসএসএমএসে "এক্সিকিউটেড স্টোরেডপ্রসেসেরনাম" চালিয়েছেন - বা আপনি কীসের জন্য উদ্বিগ্ন?
— marc_s

উপরের সঞ্চিত প্রক্রিয়াটির জন্য আমি কীভাবে সঞ্চিত প্রক্রিয়াটির নাম দিতে পারি আপনি আমাকে বলতে পারেন ??
— সুন্দর

সুতরাং, প্রথমে, আপনার সঞ্চিত প্রক্রিয়াটি তৈরি করতে হবে, আপনার কাছে কোডের ক্ষেত্রে আপনাকে যুক্ত করতে হবে: "প্রক্রিয়াটি dbo.NameOfYourStoreProcedureHere এখানে" হিসাবে শুরু করুন
— ব্ল্যাকটাইগারএক্স

1
@ সিউট: যদি আপনার স্টোরেজ পদ্ধতি হিসাবে এটি থাকে তবে আপনার একটি নাম থাকতে হবে ! "তৈরি প্রক্রিয়া (পদ্ধতি নাম)" কলে ব্যবহৃত নাম। আপনার যদি তা না থাকে, তবে আপনার কাছে কোনও সঞ্চিত প্রক্রিয়া নেই (তবে কেবলমাত্র টি-এসকিউএল বিবৃতিগুলির একটি ব্যাচ) এবং তারপরে আপনি "কমান্ডটাইপ = স্টোরডপ্রসেসার" ব্যবহার করতে পারবেন না, obviusly
— marc_s

15
SqlConnection conn = null;
SqlDataReader rdr  = null;
conn = new SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI");
conn.Open();

// 1.  create a command object identifying
//     the stored procedure
SqlCommand cmd  = new SqlCommand("CustOrderHist", conn);

// 2. set the command object so it knows
//    to execute a stored procedure
cmd.CommandType = CommandType.StoredProcedure;

// 3. add parameter to command, which
//    will be passed to the stored procedure
cmd.Parameters.Add(new SqlParameter("@CustomerID", custId));

// execute the command
rdr = cmd.ExecuteReader();

// iterate through results, printing each to console
while (rdr.Read())
{
    Console.WriteLine("Product: {0,-35} Total: {1,2}", rdr["ProductName"], rdr["Total"]);
}

14

এটি প্রতিবিম্বের মাধ্যমে পরামিতিগুলির সাথে এবং বহিরাগত সঞ্চিত প্রক্রিয়াগুলি সম্পাদন করার কোড। মনে রাখবেন যে অবজেক্টের সম্পত্তি নামগুলি সঞ্চিত পদ্ধতির পরামিতিগুলির সাথে মেলে।

private static string ConnString = ConfigurationManager.ConnectionStrings["SqlConnection"].ConnectionString;
    private SqlConnection Conn = new SqlConnection(ConnString);

    public void ExecuteStoredProcedure(string procedureName)
    {
        SqlConnection sqlConnObj = new SqlConnection(ConnString);

        SqlCommand sqlCmd = new SqlCommand(procedureName, sqlConnObj);
        sqlCmd.CommandType = CommandType.StoredProcedure;

        sqlConnObj.Open();
        sqlCmd.ExecuteNonQuery();
        sqlConnObj.Close();
    }

    public void ExecuteStoredProcedure(string procedureName, object model)
    {
        var parameters = GenerateSQLParameters(model);
        SqlConnection sqlConnObj = new SqlConnection(ConnString);

        SqlCommand sqlCmd = new SqlCommand(procedureName, sqlConnObj);
        sqlCmd.CommandType = CommandType.StoredProcedure;

        foreach (var param in parameters)
        {
            sqlCmd.Parameters.Add(param);
        }

        sqlConnObj.Open();
        sqlCmd.ExecuteNonQuery();
        sqlConnObj.Close();
    }

    private List<SqlParameter> GenerateSQLParameters(object model)
    {
        var paramList = new List<SqlParameter>();
        Type modelType = model.GetType();
        var properties = modelType.GetProperties();
        foreach (var property in properties)
        {
            if (property.GetValue(model) == null)
            {
                paramList.Add(new SqlParameter(property.Name, DBNull.Value));
            }
            else
            {
                paramList.Add(new SqlParameter(property.Name, property.GetValue(model)));
            }
        }
        return paramList;

    }

5

Ado.net ব্যবহার করে

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace PBDataAccess
{
    public class AddContact
    {   
        // for preparing connection to sql server database   

        private SqlConnection conn; 

        // for preparing sql statement or stored procedure that 
        // we want to execute on database server

        private SqlCommand cmd; 

        // used for storing the result in datatable, basically 
        // dataset is collection of datatable

        private DataSet ds; 

        // datatable just for storing single table

        private DataTable dt; 

        // data adapter we use it to manage the flow of data
        // from sql server to dataset and after fill the data 
        // inside dataset using fill() method   

        private SqlDataAdapter da; 


        // created a method, which will return the dataset

        public DataSet GetAllContactType() 
        {



    // retrieving the connection string from web.config, which will 
    // tell where our database is located and on which database we want
    // to perform opearation, in this case we are working on stored 
    // procedure so you might have created it somewhere in your database. 
    // connection string will include the name of the datasource, your 
    // database name, user name and password.

        using (conn = new SqlConnection(ConfigurationManager.ConnectionString["conn"]
        .ConnectionString)) 

                {
                    // Addcontact is the name of the stored procedure
                    using (cmd = new SqlCommand("Addcontact", conn)) 

                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                    // here we are passing the parameters that 
                    // Addcontact stored procedure expect.
                     cmd.Parameters.Add("@CommandType",
                     SqlDbType.VarChar, 50).Value = "GetAllContactType"; 

                        // here created the instance of SqlDataAdapter
                        // class and passed cmd object in it
                        da = new SqlDataAdapter(cmd); 

                        // created the dataset object
                        ds = new DataSet(); 

                        // fill the dataset and your result will be
                        stored in dataset
                        da.Fill(ds); 
                    }                    
            }  
            return ds;
        }
}

****** Stored Procedure ******

CREATE PROCEDURE Addcontact
@CommandType VARCHAR(MAX) = NULL
AS
BEGIN
  IF (@CommandType = 'GetAllContactType')
  BEGIN
    SELECT * FROM Contacts
  END
END

আপনার মন্তব্যের লাইনগুলি নষ্ট হয়ে গেছে, আপনি যদি আপনার মন্তব্যে সঞ্চিত পদ্ধতিটি দিতে পারেন যা আমাদের পক্ষে ভাল।
— পিয়ারনেট

কোডে সঞ্চিত পদ্ধতি যুক্ত করেছে, এটি পরীক্ষা করে দেখুন।
— জনি

4

এটি একটি সঞ্চিত পদ্ধতির উদাহরণ যা কোনও মান দেয় এবং এটি সি # তে কার্যকর হয়

CREATE PROCEDURE [dbo].[InsertPerson]   
-- Add the parameters for the stored procedure here  
@FirstName nvarchar(50),@LastName nvarchar(50),  
@PersonID int output  
AS  
BEGIN  
    insert [dbo].[Person](LastName,FirstName) Values(@LastName,@FirstName)  

    set @PersonID=SCOPE_IDENTITY()  
END  
Go  


--------------
 // Using stored procedure in adapter to insert new rows and update the identity value.  
   static void InsertPersonInAdapter(String connectionString, String firstName, String lastName) {  
      String commandText = "dbo.InsertPerson";  
      using (SqlConnection conn = new SqlConnection(connectionString)) {  
         SqlDataAdapter mySchool = new SqlDataAdapter("Select PersonID,FirstName,LastName from [dbo].[Person]", conn);  

         mySchool.InsertCommand = new SqlCommand(commandText, conn);  
         mySchool.InsertCommand.CommandType = CommandType.StoredProcedure;  

         mySchool.InsertCommand.Parameters.Add(  
             new SqlParameter("@FirstName", SqlDbType.NVarChar, 50, "FirstName"));  
         mySchool.InsertCommand.Parameters.Add(  
             new SqlParameter("@LastName", SqlDbType.NVarChar, 50, "LastName"));  

         SqlParameter personId = mySchool.InsertCommand.Parameters.Add(new SqlParameter("@PersonID", SqlDbType.Int, 0, "PersonID"));  
         personId.Direction = ParameterDirection.Output;  

         DataTable persons = new DataTable();  
         mySchool.Fill(persons);  

         DataRow newPerson = persons.NewRow();  
         newPerson["FirstName"] = firstName;  
         newPerson["LastName"] = lastName;  
         persons.Rows.Add(newPerson);  

         mySchool.Update(persons);  
         Console.WriteLine("Show all persons:");  
         ShowDataTable(persons, 14); 

2

ডাপার ব্যবহার সুতরাং আমি এটি যোগ করেছি আমি আশা করি যে কেউ সাহায্য করবে।

public void Insert(ProductName obj)
        {
            SqlConnection connection = new SqlConnection(Connection.GetConnectionString());
            connection.Open();
            connection.Execute("ProductName_sp", new
            { @Name = obj.Name, @Code = obj.Code, @CategoryId = obj.CategoryId, @CompanyId = obj.CompanyId, @ReorderLebel = obj.ReorderLebel, @logo = obj.logo,@Status=obj.Status, @ProductPrice = obj.ProductPrice,
                @SellingPrice = obj.SellingPrice, @VatPercent = obj.VatPercent, @Description=obj.Description, @ColourId = obj.ColourId, @SizeId = obj.SizeId,
                @BrandId = obj.BrandId, @DisCountPercent = obj.DisCountPercent, @CreateById =obj.CreateById, @StatementType = "Create" }, commandType: CommandType.StoredProcedure);
            connection.Close();
        }

2

অনুগ্রহ করে ক্রেন পরীক্ষা করুন (আমি লেখক)

https://www.nuget.org/packages/Crane/

SqlServerAccess sqlAccess = new SqlServerAccess("your connection string");
var result = sqlAccess.Command().ExecuteNonQuery("StoredProcedureName");

আপনার পছন্দ হতে পারে এমন অন্যান্য বৈশিষ্ট্যগুলির একটি গুচ্ছও রয়েছে।


এটা কাজ করে না. এটা কি পুরানো? আমি পদ্ধতিটি খুঁজে পাইনি।
— ম্যাডি

আমি উদাহরণটি আপডেট করেছি, আমাকে জানাতে ধন্যবাদ।
— গ্রেগ আর টেলর

আপনি ক্রেনের সাথে একাধিক ডেটাসেটগুলি কীভাবে ফিরিয়ে দেবেন? আমার সঞ্চিত প্রোক 3 টি ডেটাসেট রিটার্ন করে এবং আমি কেবল দ্বিতীয় ডেটাসেটে আগ্রহী। তবে ক্রেন আমাকে কেবল প্রথমটি ফিরিয়ে দেয়।
— হোয়াং মিন

1

আপনার মানে আপনার কোডটি ডিডিএল? যদি তা হয় তবে এমএসএসকিউএলের কোনও পার্থক্য নেই। উপরোক্ত উদাহরণগুলি ভালভাবে দেখায় যে এটি কীভাবে প্রার্থনা করবে। শুধু নিশ্চিত

CommandType = CommandType.Text

1

এখানে কোনও ড্যাপার উত্তর নেই। সুতরাং আমি একটি যোগ

using Dapper;
using System.Data.SqlClient;

using (var cn = new SqlConnection(@"Server=(local);DataBase=master;Integrated Security=SSPI"))
    cn.Execute("dbo.test", commandType: CommandType.StoredProcedure);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.