получить значение autoNumber из базы данных - PullRequest
2 голосов
/ 24 ноября 2011

код ниже.в моем коде я обновляю существующую строку (из существующей таблицы), чтобы программа получала все обновленные значения из textBoxes.в конце (последний столбец) поля autoNumber таблицы, которое называется "codonsAutoNum"

Я не знаю, как получить значение (значение автонумерации) из данных.Мне нужно значение в позиции (в коде), где есть «??».

спасибо всем за помощь!

код:

        private void update_Click(object sender, EventArgs e)
    {
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
        OleDbConnection myConnection = new OleDbConnection(connectionString);
        string myInsertQuery =(String.Format("UPDATE tblCodons SET codonsCodon1='{0}', codonsCodon3='{1}', " + 
        "codonsTriplet1='{2}', codonsTriplet2='{3}', codonsTriplet3='{4}', codonsTriplet4='{5}', " + 
        "codonsTriplet5='{6}', codonsTriplet6='{7}', codonsFullName='{8}'" + 
        " WHERE codonsAutoNum='{9}'",codon1.Text, codon3.Text ,triplet1.Text, triplet2.Text,
         triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
        fullName.Text,??));
        OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
        myCommand.Connection = myConnection;
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        myCommand.Connection.Close();

РЕДАКТИРОВАТЬ: это действительно запуталось. Как мой код должен казаться?Куда мне нужно поместить «SELECT @@ identity»? И я не понимаю, почему я не могу просто взять значение?(Мне нужно это как индекс для выбранной строки, чтобы понять, где находится обновление. Это работало хорошо, когда я идентифицировал это (ниже), но это не позволило мне изменить поле полного имени .., есть лучшее решение, чем столбец autonumber?

        private void update_Click(object sender, EventArgs e)
    {


        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";

        OleDbConnection myConnection = new OleDbConnection(connectionString);
        string myInsertQuery =(String.Format("UPDATE tblCodons SET codonsCodon1='{0}', codonsCodon3='{1}', " + 
        "codonsTriplet1='{2}', codonsTriplet2='{3}', codonsTriplet3='{4}', codonsTriplet4='{5}', " + 
        "codonsTriplet5='{6}', codonsTriplet6='{7}', codonsFullName='{8}'" + 
        " WHERE codonsFullName = {9}",codon1.Text, codon3.Text ,triplet1.Text, triplet2.Text,
         triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
        fullName.Text,this.name));
        OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
        myCommand.Connection = myConnection;
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        myCommand.Connection.Close();
        this.tblCodonsTableAdapter.Fill(this.myProjectDataSet.tblCodons);

имя = сохраненное значение полного имени, при каждом нажатии значение изменяется

еще один вопрос. Я пытался делать то же самое с e.Row (который я сохранял при каждом нажатиив таблице), и я получаю сообщение об ошибке «System.Data.OleDb.OleDbException (0x80004005): может содержать дублирующиеся значения в индексе, или в mainKey, или в отношениях»

Ответы [ 2 ]

2 голосов
/ 24 ноября 2011

см. Это:

http://msdn.microsoft.com/en-us/library/ks9f57t0(v=VS.80).aspx

См. Раздел «Получение значений автонумерации Microsoft Access»

версия сортировки

OleDbCommand cmdNewID = new OleDbCommand("SELECT @@IDENTITY",
            connection)

Iне верьте, что SCOPE_IDENTITY () существует в доступе

1 голос
/ 24 ноября 2011

Я бы предложил перенести запрос из встроенного sql в хранимую процедуру. Не так много, чтобы остановить внедрение SQL, а потому что вы можете настроить хранимую процедуру так, чтобы она возвращала значение только что созданного поля идентификатора (autonumber). просто верните SCOPE_IDENTITY после запуска sql.

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

см. Ссылку для получения дополнительной информации

http://msdn.microsoft.com/en-us/library/ks9f57t0.aspx

РЕДАКТИРОВАТЬ: WOW это был быстрый ответ! извиняюсь за повторяющиеся ответы

EDIT2: похоже, доступ предоставляет переменную @@ IDENTITY, которая содержит последний использованный / созданный автонуммер. так что вы должны иметь возможность запускать и выполнять встроенный запрос и следовать за ним другим в соответствии с 'SELECT @@ IDENTITY AS prevID'

...