繁体   English   中英

如何使用SqlAdapter使用参数执行SQL过程

[英]How to execute SQL procedure with parameters using SqlAdapter

我有以下前端代码:

public void loadGrid()
    {
        dt = new DataTable();
        cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        cmd.CommandText = "SP_GET_STUDENT_DTLS";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ROLL_NUM", DBNull.Value);
        cmd.Parameters.AddWithValue("@STD_ID", DBNull.Value);
        adp = new SqlDataAdapter();
        adp.SelectCommand = cmd;
        adp.Fill(dt);
        GvStudentdtls.DataSource = dt;
        GvStudentdtls.DataBind();

    }

以下是后端过程:

CREATE PROCEDURE [dbo].[SP_GET_STUDENT_DTLS] @ROLL_NUM VARCHAR(20),@STD_ID INT
AS
SET NOCOUNT ON;
BEGIN
    IF(@ROLL_NUM IS NULL)
    BEGIN
    SELECT * FROM dbo.TBL_MSTR_STUDENT_DTLS WHERE StdId=@STD_ID AND Status=1
    END
    ELSE IF(@STD_ID IS NULL)
    BEGIN
    SELECT * FROM dbo.TBL_MSTR_STUDENT_DTLS WHERE RollNo=@ROLL_NUM AND Status=1
    END
    ELSE IF(@ROLL_NUM IS NULL AND @STD_ID IS NULL)       
    BEGIN
    SELECT * FROM dbo.TBL_MSTR_STUDENT_DTLS WHERE Status=1 ORDER BY StdId DESC
    END     
  END

当我运行此代码时,尽管没有引发异常,但DataTable为空。 怎么了

您似乎没有提供任何参数值:

cmd.Parameters.AddWithValue("@ROLL_NUM", DBNull.Value);
cmd.Parameters.AddWithValue("@STD_ID", DBNull.Value);

DBNull.Value引导下,您应该放置实际的参数值。

编辑:另外,您的存储过程有问题。 下面的代码:

IF(@ROLL_NUM IS NULL AND @STD_ID IS NULL)  

应该是if / else序列中的第一个if选项。 否则它将永远不会执行。

如果两者都为null,则将执行第一个选择,这可能不会返回任何内容,因为您将查找StdId = null(无效测试)的行。

一个过程不返回任何东西。 SP_GET_STUDENT_DTLS所做的所有工作都是将选择结果打印到控制台中。

如果确实允许数据库中已经被要求过int的int为空,那么应该将参数传递为System.Data.SqlTypes.SqlInt32.Null ,而不是DBNull.Value。

有关处理空值的更多信息... http://msdn.microsoft.com/zh-cn/library/ms172138(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM