#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;
Но вы не должны использовать точки в каких-либо именах..