Как исправить ошибку «Не удалось связать слово «Многосоставный идентификатор»

#c# #sql

#c# #sql

Вопрос:

Я хочу вставить некоторые данные из блокнота, но я получил эту ошибку:»Многосоставный идентификатор «id.localitate» не может быть привязан».

Вот код:

 string[] siruri = sir.Split(split);
cmd = new SqlCommand("Insert into Localitati(nume) values(@localitate)", con);

cmd.Parameters.AddWithValue("localitate", siruri[0].Trim());
cmd.ExecuteNonQuery();

cmd = new SqlCommand("Select id.localitate from Localitati where nume=@nume", con);

cmd.Parameters.AddWithValue("nume", siruri[0].Trim());

int idlocalitate = Convert.ToInt32(cmd.ExecuteScalar());

int nrzile;
  

Комментарии:

1. id.localitate — это ваша проблема — это поиск столбца localitate в вызываемой таблице id , что, вероятно, не то, что вы имели в виду. Вы просто имели в виду «выбрать идентификатор …»?

2. id.localitate — это столбец в таблице с именем Localitati.

3. @AdrianGbr попробуйте SELECT [id.localitate] FROM Localitati

4. @AdrianGbr итак, столбец называется «id» или столбец называется «localitate»?

5. Возможно, вы также захотите взглянуть на SCOPE_IDENTITY и / или OUTPUT предложение. Нет причин выполнять два запроса, в которых второй просто пытается уловить последствия первого.

Ответ №1:

Согласно вашей команде id.localitate — это столбец в таблице с именем Localitati, вам нужно использовать имя столбца в квадратных скобках [id.localitate] , поэтому код будет:

 cmd = new SqlCommand("Select [id.localitate] from Localitati where nume=@nume", con);
  

Ответ №2:

Да, потому что в вашем запросе нет такого псевдонима таблицы. Тогда это должно быть похоже

 Select id.localitate from Localitati id where nume=@nume
  

Или просто запрос без какого-либо псевдонима таблицы

 Select localitate from Localitati where nume=@nume
  

согласно вашему комментарию id.localitate — это столбец в таблице с именем Localitate

Затем вам нужно экранировать столбец, используя [] like Select [id.localitate] или Select "id.localitate" , хотя я бы никогда не рекомендовал иметь столбец с таким именем. Правильно определите имя объектов вашей базы данных (таблица, столбец)

Ответ №3:

Допустим, у вас есть таблица «Localitati», подобная этой:

 | Id | Name | FatherId |
| 1  | A    | null     |
| 2  | B    | 1        |
  

Вы могли бы запустить Select следующим образом:

 SELECT Id FROM Localitati WHERE 1 = 1;
  

В вашем запросе вы можете установить синонимы для своих таблиц, чтобы выбрать соответствующий столбец. Это необходимо, если вы хотите присоединиться к самой таблице:

    SELECT a.Id, b.Id
     FROM Localitati a
LEFT JOIN Localitati b
       ON a.Id = b.FatherId
    WHERE 1 = 1;
  

В вашем вопросе говорилось, что имя ваших столбцов — «id.Localitati» (о чем я не думаю). Если это так, вы должны указать свое имя столбца:

 | Id.Localitati | Name | FatherId |
| 1             | A    | null     |
| 2             | B    | 1        |
  

Запрос будет выглядеть следующим образом:

    SELECT a."Id.Localitati", b."Id.Localitati"
     FROM Localitati a
LEFT JOIN Localitati b
       ON a."Id.Localitati" = b.FatherId
    WHERE 1 = 1;
  

Но вы не должны использовать точки в каких-либо именах..