簡體   English   中英

如何在asp.net中調用存儲過程

[英]How to call a stored procedure in asp.net

我已經編寫了用於insertupdatedeleteselect單個存儲過程。 程序是:

ALTER PROCEDURE [dbo].[artdetails1]
(
    @artdetailId int,
    @artDescription varchar(50),
    @artShortdesc varchar(50),
    @artValidity varchar(50),
    @artStatus varchar(50),
    @StatementType varchar(50)

)

AS
BEGIN
  BEGIN
    IF @StatementType = 'Insert'
        BEGIN
            INSERT INFOartdetails(artDescription,artShortdesc,artValidity,artStatus)
                values(@artDescription,@artShortdesc,@artValidity,@artStatus)   

        END

    IF @StatementType = 'Select'
        BEGIN
            SELECT * FROM artdetails
        END 

    IF @StatementType = 'Update'
        BEGIN
            UPDATE artdetails SET
                artDescription=@artDescription,artShortdesc=@artShortdesc,
                artValidity=@artValidity,artStatus=@artStatus
                where artdetailId= @artdetailId
        END

    ELSE IF @StatementType = 'Delete'
        BEGIN
            UPDATE artist SET @artStatus= 'not available';
        END
  END
END

但是我對如何檢查C#代碼中的語句類型並調用此過程感到困惑。 請幫忙。 我是SQL新手。

首先,你不該在一個過程中進行選擇和更新。 您應該具有用於​​插入,更新,選擇和刪除的單獨過程。

但是,這是從C#調用插入過程的方式:

  1. 建立連接
  2. 創建一個命令
  3. 添加參數
  4. 執行命令
  5. 捕獲結果(如果適用)

示例代碼:

using(var conn = new SqlConnection(connString) 
{
    using(var cmd = new SqlCommand("artdetails1", conn)
    {
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@artdetailId", detailID);
        cmd.Parameters.AddWithValue("@artDescription", description);
        cmd.Parameters.AddWithValue("@artShortdesc", shortDesc);
        cmd.Parameters.AddWithValue("@artValidity", validity);
        cmd.Parameters.AddWithValue("@artStatus", status);
        cmd.Parameters.AddWithValue("@StatementType","Insert");

        conn.Open();
        cmd.ExecuteNonQuery();  // No output to capture for an `INSERT`
    }
}

存儲過程調用示例(假設您正在使用SQL Server)。 對於優秀的程序員是懶惰的規則,對於所有內容都擁有一個存儲過程是一個例外:

  using(var conn = new SqlConnection(@"Server=.\SQL2008;Database=foo;Integrated Security=true")) {
    var cmd = new SqlCommand("[dbo].[artdetails1]", conn);
    cmd.Parameters.Add("@StatementType", SqlDbType.VarChar, 50).Value = "Insert";
    // set all other parameters
    cmd.CommandType = CommandType.StoredProcedure;
    conn.Open();
    cmd.ExecuteNonQuery();
  }

下面概述了從c#調用存儲的proc的基本過程。

String connstr = @"Data Source=myserverName;Initial Catalog=myCatalogName;Integrated Security=True";
String statementType = "Select"; //just an example

SqlConnection conn = new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;

cmd.CommandText = "StoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Parameters.Add("artdetailId", SqlDbType.Int).Value = 1;
cmd.Parameters.Add("@artDescription", SqlDbType.VarChar).Value = "myArtDescription";
cmd.Parameters.Add("@artShortdesc", SqlDbType.VarChar).Value = "myArtShortDesc";
cmd.Parameters.Add("@artValidity", SqlDbType.VarChar).Value = "myArtValidity";
cmd.Parameters.Add("@artStatus", SqlDbType.VarChar).Value = "myArtStatus";
cmd.Parameters.Add("@StatementType", SqlDbType.VarChar).Value = StatementType;

sql conn.Open();

if StatementType = "Select" {
reader = cmd.ExecuteReader();
// Use DataReader to access the data here.
)
else if StatementType = "Insert" || StatementType = "Update" || StatementType = "Delete"
rowsAffected = cmd.ExecuteNonQuery();
}

注意:該代碼未經測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM