Змінити існуючу рядок і видалити повну рядок

Я намагався зробити процедуру, яку натиснувши на кнопку, програма виведе всю інформацію з TextBoxes і встановить її в конкретному рядку, що було раніше, і змінити його в базі даних Access.

Я зробив зв'язування динамічних даних, які чудово працюють, натиснувши один із вмісту в будь-якій ячейці DataGridView, він поміщає інформацію для всієї рядка у відповідні текстові вікна. Я визначив імена текстових полів подібним чином з відповідними іменами стовпців.

Коли я її налагоджую, програма припиняє та повідомляє мені, що існує проблема з командою SQL.

Мені потрібен код, як видалити повну рядок і оновити базу даних, і я не вмію це робити.

Ось код, який я написав:

namespace myProject
{
  public partial class EditCodons : Form
  {
    private OleDbConnection dataConnection;
    private int row;
    private string name;
    public EditCodons()
    {
      InitializeComponent();
      OpenDb();
    }

    private void EditCodons_Load(object sender, EventArgs e)
    {
     //TODO: This line of code loads data into the 'myProjectDataSet.tblCodons' table. You can move, or remove it, as needed.
      this.tblCodonsTableAdapter.Fill(this.myProjectDataSet.tblCodons);
    }

    private void OpenDb()
    {
      dataConnection = new OleDbConnection();
      try
      {
        dataConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
        dataConnection.Open();
      }
      catch (Exception e)
      {
        MessageBox.Show("Error accessing the database: " +
                         e.Message,
                         "Errors",
                         MessageBoxButtons.OK,
                         MessageBoxIcon.Error);
      }
    }

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
      this.row = e.RowIndex;
      this.name = fullName.Text = dataGridView1.Rows[e.RowIndex].Cells[8].FormattedValue.ToString();
      codon1.Text = dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue.ToString();
      codon3.Text = dataGridView1.Rows[e.RowIndex].Cells[1].FormattedValue.ToString();
      triplet1.Text = dataGridView1.Rows[e.RowIndex].Cells[2].FormattedValue.ToString();
      triplet2.Text = dataGridView1.Rows[e.RowIndex].Cells[3].FormattedValue.ToString();
      triplet3.Text = dataGridView1.Rows[e.RowIndex].Cells[4].FormattedValue.ToString();
      triplet4.Text = dataGridView1.Rows[e.RowIndex].Cells[5].FormattedValue.ToString();
      triplet5.Text = dataGridView1.Rows[e.RowIndex].Cells[6].FormattedValue.ToString();
      triplet6.Text = dataGridView1.Rows[e.RowIndex].Cells[7].FormattedValue.ToString();
      fullName.Text = dataGridView1.Rows[e.RowIndex].Cells[8].FormattedValue.ToString();
      start.Text = dataGridView1.Rows[e.RowIndex].Cells[9].FormattedValue.ToString();
      end.Text = dataGridView1.Rows[e.RowIndex].Cells[10].FormattedValue.ToString();
    }

    private void addRow_Click(object sender, EventArgs e)
    {
    }

    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 = "INSERT INTO tblCodons (codonsCodon1, codonsCodon3, codonsTriplet1, codonsTriplet2, codonsTriplet3,codonsTriplet4, codonsTriplet5, codonsTriplet6, codonsFullName, codonsStart, codonsEnd  )" +
            " Values(('codon1.Text', 'codon3.Text', 'triplet1.Text', 'triplet2.Text', 'triplet3.Text','triplet4.Text', 'triplet5.Text', 'triplet6.Text', 'fullName.Text', 'start.Text', 'end.Text')" +
            "WHERE codonsFullName =" + this.name;
      OleDbCommand myCommand = new OleDbCommand(myInsertQuery);
      myCommand.Connection = myConnection;
      myConnection.Open();
      myCommand.ExecuteNonQuery();
      myCommand.Connection.Close();
    }

    private void reset_Click(object sender, EventArgs e)
    {
      codon1.Clear();
      codon3.Clear();
      triplet1.Clear();
      triplet2.Clear();
      triplet3.Clear();
      triplet4.Clear();
      triplet5.Clear();
      triplet6.Clear();
      start.Clear();
      end.Clear();
      fullName.Clear();
    }

    private void deleteRow_Click(object sender, EventArgs e)
    {

    }

  }
}

* РЕДАКТИ: * Я спробував змінити SQL, і написано "список помилок"

Помилка 1 Тільки призначення, виклик, приріст, декремент та нові вирази об'єктів можуть бути використані як твердження: C: \ Projects_2012 \ Project_Noam \ Project \ myProject \ myProject \ EditCodons.cs 82 59 myProject Помилка 2 Недійсний термін експресії ')' C: \ Projects_2012 \ Project_Noam \ Project \ myProject \ myProject \ EditCodons.cs 82 60 myProject Помилка 3; очікується C: \ Projects_2012 \ Project_Noam \ Project \ myProject \ myProject \ EditCodons.cs 82 60 myProject тому я змінюю це на це:

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}', codonsStart='{9}', " + 
        "codonsEnd='{10}' WHERE codonsFullName='{11}'",
        triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
        fullName.Text, start.Text, end.Text, this.name));

і це сталь не працює. і я отримую помилку від останнього коментаря.

0

1 Відповіді

У цьому є кілька помилок.

По-перше, в команді SQL у вас є дві відкриті круглі дужки після «Значення», один з яких не закритий. По-друге, ви фактично не отримуєте значення з ваших змінних в операторі insert, а скоріше, ви намагаєтесь вставити в базу текст "codon1.Text", "codon3.Text" тощо. Залежно від типів даних стовпців це може призвести до помилок.

Однак головна проблема в цьому полягає в тому, що ви не можете робити оновлення за допомогою вставки insert. Скоріше, вам слід скористатися твердженням Update, яке виглядає так

UPDATE tableName SET column=value WHERE column=something

Лінія коду, що встановлює оператор SQL, повинна бути такою:

//Linebreaks used to make the code easier to read.
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}', codonsStart='{9}', " + 
            "codonsEnd='{10}' WHERE codonsFullName='{11}'",
            codon1.Text, codon3.Text, triplet1.Text, triplet2.Text,
            triplet3.Text, triplet4.Text, triplet5.Text, triplet6.Text,
            fullName.Text, start.Text, end.Text, this.name);

Ця заява буде оновлювати будь-який рядок, де codonsFullName дорівнює тому, що зберігається в змінній .name.

Видалення простіше, і це буде зроблено з:

string myDeleteQuery = "DELETE FROM tblCodons WHERE codonsFullName='" + this.name + "'";

припускаючи, що codonsFullName це те, що ви хочете видалити.

Редагувати:

Я відредагував мою відповідь, щоб включити окремі лапки, які я забув включити спочатку.

0
додано
коли я намагаюся натиснути на кнопку updaye з'являється повідомлення про помилку: System.Data.OleDb.OleDbException (0x80040E10): Неможливо оцінити один або декілька необхідних параметрів
додано Автор user1017315, джерело
дякую ще раз: @Ben за ваш відгук, але тепер я отримую іншу помилку: "System.Data.OleDb.OleDbException (0x80040E14): помилка синтаксису (відсутній оператор), що виражає запит". Не намагайтеся видалити замовлення SQL ще
додано Автор user1017315, джерело
Я поставив всю "myInsertQuery" в (), і я зараз отримую цю помилку: System.FormatException: Індекс (на основі нуля) повинен бути більшим або рівним нулю і меншим, ніж розмір списку аргументів.
додано Автор user1017315, джерело
О, спасибі! це працює прямо! ти дивовижний!
додано Автор user1017315, джерело
Якщо ви намагаєтесь видалити повну рядок, друга частина моєї відредагованої відповіді тепер повинна працювати, коли вона викликається з вашої програми: string myDeleteQuery = "ВИДАЛИТИ ВІД tblCodons WHERE codonsFullName = '" + це.назва + ""; Спочатку я забув включити одиночні лапки, які повинні також бути причиною помилки з вашого оригінального коментаря. Помилка, яку ви опублікували, вказала, що існує значення, яке було відсутнє або порожнє, що, безумовно, відбудеться, якщо навколо значень не було одиночних лапок. Якщо ви намагаєтеся внести мої зміни, він повинен працювати.
додано Автор Ben, джерело
Чи можете ви опублікувати коментар або відредагувати своє початкове питання тим, що ви редагуєте? Використовуючи опублікований код, я можу підключитися до простої таблиці в Access, яку я створив та оновлював рядки на основі кодусів.
додано Автор Ben, джерело
Ах, я випадково вийшов у закриті круглі дужки під час написання цього, тому вам довелося додати в додаткові дужки спочатку. Причина, чому ви отримуєте нову помилку, полягає в тому, що десь уздовж лінії ви втратили перший рядок параметрів: codon1.Text, codon3.Text, triplet1.Text, triplet2.Text, що означає, що ви використовуєте менше, ніж кількість параметрів, вказаних у рядку.
додано Автор Ben, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug