我有以下前端代码:
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为空,尽管没有抛出异常。出了什么问题?
答案 0 :(得分:1)
您似乎没有提供任何参数值:
cmd.Parameters.AddWithValue("@ROLL_NUM", DBNull.Value);
cmd.Parameters.AddWithValue("@STD_ID", DBNull.Value);
Ins DBNull.Value
,你应该把你的实际参数值。
编辑: 此外,您的存储过程有问题。以下代码:
IF(@ROLL_NUM IS NULL AND @STD_ID IS NULL)
在你的if / else序列中,应该是你的第一个选择。否则它永远不会被执行。
如果两者都为null,则将执行第一个选择,这可能不会返回任何内容,因为您将查找StdId = null,无效测试的行。
答案 1 :(得分:0)
程序不返回任何内容。
所有SP_GET_STUDENT_DTLS
都会将选择结果打印到控制台中。
答案 2 :(得分:0)
如果您确实在数据库中允许int为null(已经被询问),那么您应该将参数作为System.Data.SqlTypes.SqlInt32.Null传递,而不是DBNull.Value
有关处理空值的更多信息...... http://msdn.microsoft.com/en-us/library/ms172138(v=vs.110).aspx