SqlDataReader 找不到行

SqlDataReader no rows found

这是我的代码

public string LeaderIdLookup(string leadername)
        {
        string step = null;
        try
            {

            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select EmpId,Fullname from Employee where FullName like '@LeaderName'";
            cmd.Parameters.Add(new SqlParameter("LeaderName", SqlDbType.VarChar));
            cmd.Parameters["LeaderName"].Value = leadername.Trim();
            cmd.Connection = con;
            SqlDataReader dr = cmd.ExecuteReader();
            dr.Read();

            step = "assigning the value from datareader to the variable lookup as a string (leaderidlookup) ";
            if (dr.HasRows)
                Lookup = dr[0].ToString();
            else
                Lookup = "no rows found";

            dr.Close();
            return Lookup;

            }
        catch (SqlException ex)
            {
            Lasterror = string.Format("step {0} threw sql error {1}", step, ex.Message);
            Debug.Print(Lasterror);
            return string.Empty;
            }
        catch (Exception ex)
            {
            Lasterror = string.Format("step {0} threw error {1}", step, ex.Message);
            Debug.Print(Lasterror);
            return string.Empty;
            }

        }

问题是 SqlDataReader 没有 return 任何行 我有一种预感,它与参数替换有关,因为当我在其中硬编码一个名称而不是使用参数时,它可以完美地工作

我似乎无法弄清楚我哪里出错了。

你的 SqlConnection 在哪里?尝试如下所示的内容。 有关连接字符串示例,请参见此处:https://msdn.microsoft.com/en-us/library/ms254500(v=vs.110).aspx#Anchor_2

您的连接字符串将是这样的:"Data Source=localhost;Initial Catalog=MyDataBaseName;Integrated Security=true"(假设您正在连接到本地主机并且您的帐户当然对数据库具有特权)

try
    {
        using (SqlConnection sqlConnection = new SqlConnection("put your connection string here"))
        {
            sqlConnection.Open();
            using (SqlCommand sqlCommand = new SqlCommand("select EmpId,Fullname from Employee where FullName like @LeaderName", sqlConnection))
            {
                sqlCommand.CommandType = System.Data.CommandType.Text;
                sqlCommand.Parameters.Add("@LeaderName", SqlDbType.VarChar).Value = leadername;
                SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
                while (sqlDataReader.Read())
                {
                    //lots of options here, read it how you like...
                    string EmpID = sqlDataReader["EmpID"].ToString();
                    string FullName = sqlDataReader["FullName"].ToString();
                }
            }
        }
    }
 catch (Exception ex) { throw new System.ArgumentException(ex.Message); }

您需要删除查询中变量名两边的单引号。否则,您将在 FullName"@LeaderName" 之间进行文字比较......这不太可能存在(您没有行的原因)。您还需要提供带有前导 @ 的参数名称。

cmd.CommandText = "select EmpId,Fullname from Employee where FullName like @LeaderName";
var leaderParameter = cmd.Parameters.Parameters.Add("@LeaderName", System.Data.SqlDbType.NVarChar);
leaderParameter.Value = "%" + leaderName.Trim() + "%";

您需要删除 "LIKE '@LeaderName'" 两边的引号,并且必须以 @ 开头指定参数名称。所以:

... new SqlParameter("@LeaderName", ...