Member 7940184 Ответов: 4

Ошибка:динамическая генерация sql для команды update не поддерживается для команды select, которая не возвращает никакой информации о ключевом столбце


В моем коде я пытаюсь обновить базу данных,когда изменения сделаны в datagridview, для этого я добавил
Dim cb как новый SqlCommandBuilder(adp)

adp.Update(ds, "tablename")
В adp.update(ds,"tablename")я получаю ошибку:динамическая генерация sql для команды update не поддерживается для команды select, которая не возвращает никакой информации о ключевом столбце
Могу я узнать причину плз..

mukehs tyagi

главное тока droup вниз ки значение ко управления datagridview главное шоу krakar нас значение ко обновление Карна Хай в C# пожалуйста, пришлите мне код

4 Ответов

Рейтинг:
24

Dave Kreskowiak

Таблица, в которой выполняется выбор, не имеет столбца первичного ключа. Он не может создавать никаких других операторов UPDATE или DETELE, потому что у вас нет способа однозначно идентифицировать каждую отдельную запись в вашей таблице.


Member 7940184

Но моя таблица уже имеет первичный ключ и я использую identity для автоинкремента value.is это проблема для получения этих ошибок.

Dave Kreskowiak

Тогда ваш запрос SELECT не возвращает столбец первичного ключа. Столбец должен быть создан в качестве первичного ключа. Вы не можете просто присвоить значения этому столбцу, относиться к нему как к ключевому столбцу и ожидать, что он будет работать.

Thakur Varun Singh

Да Дейв ты абсолютно прав

PotatoJam

спасибо

ernestmachado

но зачем нужен Праймерный Ключ без первичного ключа я не могу обновить или удалить строку в таблице?????

Dave Kreskowiak

Я уже говорил об этом в своем посте. Без возврата столбца первичного ключа у CommandBuilder нет возможности однозначно идентифицировать каждую запись в таблице.

RadumixMatsad

ты такой замечательный Дэйв, вот и все.

dpokiya

да, ты такой талантливый...

O Zotaj

Отличный :)

Рейтинг:
1

shetty786

да, эта проблема решается путем обновления первичного ключа в вашей таблице из-за обновления данных и удаления по уникальному столбцу данных.


Richard Deeming

Этот вопрос был задан, на него ответили и решили более ЧЕТЫРЕ С ПОЛОВИНОЙ ГОДА НАЗАД!

Рейтинг:
0

mayankkothari143

You Have to Mention primary key in your Table.then before executing update command of dataApdapter you have to set update command of dataAdapter with CommandBuilder object like this 

--- create connection ----
SqlDataAdapter adp = new SqlDataAdapter();
SqlCommandBuilder bldr;

bldr=new SqlCommandBuilder(adp);
adp.UpdateCommand = bldr.GetUpdateCommand();
adp.Update(ds.Tables[0]);


Рейтинг:
0

Tuan tuanv2t

I've spent two days to find some way to workaround. Lucky that I could get it done. The idea is to add a dump primary key in the DataTable, this new dump column does not affect the real database table. Here's my code sample

Dim currentRow = m_DataTable.Rows(m_RowPosition) Dim tmpRows() As DataRow = {currentRow}


Dim cmdBuilder As OracleCommandBuilder = New OracleCommandBuilder(m_Adapter)

       **If m_DataTable.PrimaryKey.Count = 0 Then
           m_DataTable.Columns.Add(New DataColumn("_ID_", System.Type.GetType("System.String")))
           m_DataTable.Columns("_ID_").Unique = True
       End If**

       m_Adapter.Update(tmpRows)


Note: The currentRow is the row is being edited . Please consider carefully to apply this tip because it might update all data of table. It's suitable for case your table has only one row ( some kind of configuration data )