Указанное поле 'ID' может относиться к нескольким таблицам - PullRequest
0 голосов
/ 07 декабря 2018

Я получаю эту ошибку, когда пытаюсь найти по идентификатору:

system.data.oledb.oledbexception, указанное поле 'ID' может ссылаться на несколько таблиц, перечисленных в предложении FROMвашего оператора SQL

Вот мой код:

public static Invoice GetInvoice(string id)
    {
        OleDbConnection conn = GetConnection();
        Invoice invoice = null;
        if (conn == null)
        {
            return null;
        }
        string sqlString = "SELECT * FROM Person INNER JOIN Employee ON " +
            "Person.ID=Employee.ID WHERE ID = @ID";
        OleDbCommand comm = new OleDbCommand(sqlString, conn);
        comm.Parameters.AddWithValue("@ID", id);
        OleDbDataReader dr = null;
        try
        {
            conn.Open();
            dr = comm.ExecuteReader(CommandBehavior.SingleRow);
            if (dr.Read())
            {
                invoice = new Invoice();
                invoice.PersonID = (string)dr["ID"];
                invoice.FirstName = (string)dr["FirstName"];
                invoice.LastName = (string)dr["LastName"];
                invoice.Age = (int)dr["Age"];
            }
        }
        catch (Exception ex)
        {
            invoice = null;
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
        }
        return invoice;
    }

1 Ответ

0 голосов
/ 07 декабря 2018

Вам нужно изменить свой запрос, в тот момент, когда вы выбираете подстановочный знак '*', что означает, что он будет извлекать как идентификатор пользователя, так и идентификатор сотрудника, но не будет иметь уникальную ссылку.Измените подстановочный знак, чтобы получить точный идентификатор таблицы, как показано ниже:

SELECT Person.ID, FirstName, LastName FROM...

Вам также потребуется изменить выражение WHERE на что-то вроде:

WHERE Person.ID = @ID

какоператор where не знает, по какому идентификатору таблицы фильтровать (я знаю, что это те же значения, но SQL не заботится об этом)

...