【问题标题】:dr = cmd.ExecuteReader(); where dr returns null value how to fix it?博士 = cmd.ExecuteReader(); dr在哪里返回空值如何解决?
【发布时间】:2019-05-05 07:28:32
【问题描述】:

数据库中有数据,但没有返回任何值。我想从数据库中检索值

我已经完成插入它工作正常但选择不工作

  public class Portal
    {
        public SqlCommand cmd = null;

        ConnectionClass obj = new ConnectionClass();

         public ArrayList fetchEmployee(int empid, String fname, String lname, String qualification, String dob, int status, String image, String statusname, String path)
        {
            ArrayList ar = null;
            SqlDataReader dr = null;
            try
            {
                obj.getConnection();
                cmd = new SqlCommand("PROC_EMPLOYEE",obj.con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@flag", SqlDbType.Int).Value = status;
                cmd.Parameters.Add("@statusname", SqlDbType.VarChar).Value = statusname;
                cmd.Parameters.Add("@id", SqlDbType.Int).Value = empid;
                cmd.Parameters.Add("@fname", SqlDbType.VarChar).Value = fname;
                cmd.Parameters.Add("@lname", SqlDbType.VarChar).Value = lname;
                cmd.Parameters.Add("@qualification", SqlDbType.VarChar).Value = qualification;
                cmd.Parameters.Add("@dob", SqlDbType.VarChar).Value = dob;
                cmd.Parameters.Add("@image", SqlDbType.NVarChar).Value = image;
                cmd.Parameters.Add("@path", SqlDbType.NVarChar).Value = path;
                obj.con.Open();
                dr = cmd.ExecuteReader();
                while(dr.Read()){

                    ar=new ArrayList();
                    ar.Add(dr[1].ToString());
                    Console.WriteLine(dr["fname"].ToString());
                }
                dr.Close();
                obj.con.Close();


            }
            catch(Exception ex) {
                ar=null;
            }
}
}
}

Here is my procedure
ALTER PROCEDURE [dbo].[PROC_EMPLOYEE](@id numeric(18,0), @fname varchar(25) ,@lname varchar(25), @dob varchar(25),@statusname varchar(25) ,@qualification varchar(25),@image nvarchar(25) = NULL,@flag int,@path nvarchar(MAX) = NULL)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    declare
    @statusid numeric(18,0),
    @i numeric(18,0),
    @flag1 int
    -- Insert statements for procedure here
    set @flag1=@flag;
    if(@flag1 = 1)
    BEGIN
    Set @statusid = (Select status_id from dbo.Status where status_name  = @statusname);
    Insert into Employee(fname,lname,qualification,dob,image,status_id,path) values(@fname,@lname,@qualification,@dob,@image,@statusid,@path);
    END
    if(@flag1 = 2)
    BEGIN
    Delete from Employee where emp_id=@id;
    END
    if(@flag1 = 3)
    BEGIN
    Select fname from Employee where emp_id=@id;
    END
    if(@flag1 = 5)
    BEGIN
    Select emp_id,fname,lname,qualification,dob from Employee;
    END
    if(@flag1 = 4)
    BEGIN
    Set @statusid = (Select status_id from dbo.Status where status_name  = @statusname);
    update Employee set qualification=@qualification, image=@image, dob=@dob,fname=@fname,lname=@lname,status_id=@statusid where emp_id=@id;
    END
END

我希望它获取记录,但它返回的记录未找到。它正在正确连接到数据库。有人可以帮忙吗

【问题讨论】:

  • 您是否有返回列或别名为 1 来自选择查询?
  • 发布你传递给函数的参数和你得到的错误信息或输出。如果是错误,哪一行会抛出异常?
  • 我尝试在标签中显示正在显示的值,但它以字符串而不是数组的形式返回所有值。因此,当我尝试在文本框中显示时,只会显示最后一个值

标签: c#


【解决方案1】:

你应该用 catch(Exception ex) {...} 做一些有用的事情 目前 ex.Message 可能返回:“ExecuteReader:连接属性尚未初始化。” 您应该为 cmd.Connection 分配您要使用的连接的值。

(见:SQL Server error: ExecuteNonQuery: Connection property has not been initialized

【讨论】:

  • 谢谢,但我是有趣的 dll,所以我不能直接使用 textbox.text
猜你喜欢
  • 2020-12-25
  • 1970-01-01
  • 2018-11-09
  • 2017-02-27
  • 2021-08-17
  • 1970-01-01
  • 2018-12-10
  • 2014-10-15
相关资源
最近更新 更多