Имя переменной '@ID' уже объявлено.Имена переменных должны быть уникальными в пределах пакета запроса или хранимой процедуры - PullRequest
0 голосов
/ 24 ноября 2018

Я построил функцию поиска, которая будет искать по идентификатору и по фамилии.

На данный момент это мой код:

SqlCommand cmd = new SqlCommand("SELECT [ID],[Name],[LastName],[FirstName],[FinalGrade] FROM DATABASE WHERE ID = @ID OR LastName = @lname");

using (SqlConnection con = new SqlConnection(conString))
{
    cmd.Connection = con;
    con.Open();

    cmd.Parameters.AddWithValue("@ID", ID);
    cmd.Parameters.AddWithValue("lname",lname);

    /*if (ID == null)
    {
        unitsParam.Value = DBNull.Value;
    }*/

    if(String.IsNullOrEmpty(ID))
    {
        cmd.Parameters.AddWithValue("@ID", DBNull.Value);
    }

    if (String.IsNullOrEmpty(lname))
    {
        cmd.Parameters.AddWithValue("@lname", DBNull.Value);
    }

    using (SqlDataReader sdr = cmd.ExecuteReader())
        if (sdr.HasRows)
        {
            while (sdr.Read())
            {
                int i = 0;

                // vm.SearchResults.Add(new ApqcrDirSearch
                ApqcrDirModel aRec = new ApqcrDirModel();

                aRec.ID = sdr.IsDBNull(i) ? null : sdr.GetString(i);
                i++;

                aRec.Name = sdr.IsDBNull(i) ? null : sdr.GetString(i);
                i++;

                aRec.LastName = sdr.IsDBNull(i) ? null : sdr.GetString(i);
                i++;

                aRec.FirstName = sdr.IsDBNull(i) ? null : sdr.GetString(i);
                i++;

                vm.SearchResults.Add(aRec);
            }
        }

        con.Close();
}

Как выполнять поиск по идентификатору и по идентификатору?Фамилия ?Должен ли я использовать SqlCommandParameter?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Причина, по которой вы получаете сообщение об ошибке: "The variable name '@ID' has already been declared. Variable names must be unique within a query batch or stored procedure" Причина в том, что вы объявляете параметр @ID дважды.Вы также объявляете параметр @lname дважды.Удалите следующий код из вашего метода, и ошибка не должна появиться снова:

if(String.IsNullOrEmpty(ID))
{
    cmd.Parameters.AddWithValue("@ID", DBNull.Value);
}

if (String.IsNullOrEmpty(lname))
{
    cmd.Parameters.AddWithValue("@lname", DBNull.Value);
}

Приведенный выше код не имеет смысла реализовывать.Прежде чем вводить метод, вы должны проверить, не являются ли параметры lastname и id пустыми.Думайте об этом как о проверке ввода.

0 голосов
/ 25 ноября 2018

Вы добавляете свои параметры дважды.Вместо использования AddWithValue, используйте Add, и тогда вы можете проверить, являются ли ID или Name нулевыми или пустыми, например:

cmd.Parameters.Add("@ID", SqlDbType.VarChar)
    .Value = string.IsNullOrEmpty(ID) ? (object)DBNull.Value : ID;

cmd.Parameters.Add("@lname", SqlDbType.VarChar)
    .Value = string.IsNullOrEmpty(lname) ? (object)DBNull.Value : lname;

Примечание: я предполагаю VarChar, может быть другого типа.

...