且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在c#中调用t-sql存储过程

更新时间:2023-01-29 11:49:36

尝试:

Try:
using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SelectRecord", con))
        {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@lastname", "Smith");
        cmd.Parameters.AddWithValue("@firstname", "John");
        cmd.Parameters.AddWithValue("@SelectOption", "Firstname");
        using (SqlDataReader read = cmd.ExecuteReader())
            {
            while (read.Read())
                {
                ...
                }
            }
        }
    }


OriginalGriff的回答是正确的。



但是,你也应该像这样简化你的查询:



OriginalGriff's answer is correct.

However, you should also simplify your query like this:

SELECT
    b.id AS ID,
    b.firstname As FIRSTNAME,
    b.lastname AS LASTNAME,
    b.middlename AS MIDDLENAME,
    w.class_name AS CLASS,
    p.passport_img AS PASSPORT
FROM
    base_user_details b Left JOIN passport p ON
        b.id = p.id
    LEFT JOIN ward_class w ON
        b.id=w.id
WHERE
    (@SelectOption == 'class' AND b.class_name = @filter)
    OR (@SelectOption == 'Firstname' AND b.firstname = @filter)
    OR (@SelectOption == 'Lastname' AND b.lastname = @filter)


像这样用可变长度编写SQL查询,......:)





write SQL query like this with variable length,, ... :)


--exec [dbo].[SelectRecord] 'Firstname'

Alter PROCEDURE [dbo].[SelectRecord] 
	@SelectOption Varchar(50)='',
	@lastname Varchar(50) = null,
	@firstname Varchar(50) = null,
	@class Varchar(50) = null

AS
BEGIN
	
	if(@SelectOption='Lastname')
		BEGIN
			 SELECT 'LastName'
		END
	ELSE IF(@SelectOption='Firstname')
		BEGIN
			SELECT 'FirstName'
		END
	ELSE IF(@SelectOption='class')
		BEGIN
			select 'Class'
		END
 
END







现在从后面的代码正确传递你的@SelectOption变量




now pass your @SelectOption variable correctly from code behind