Изменение существующей строки и удаление полной строки - PullRequest
0 голосов
/ 28 октября 2011

Я попытался создать процедуру, при которой, нажав кнопку, программа извлечет всю информацию из текстовых ящиков и установит ее в конкретной строке, которая была раньше, и изменит ее в базе данных 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));

и сталь не работает. и я получаю ошибку из последнего комментария.

1 Ответ

0 голосов
/ 28 октября 2011

В этом есть несколько неправильных вещей.

Во-первых, в команде SQL у вас есть две открытые скобки после «значений», одна из которых не закрыта.Во-вторых, вы на самом деле не получаете значение из ваших переменных в операторе вставки, а пытаетесь вставить текст «codon1.Text», «codon3.Text» и т. Д. В базу данных.В зависимости от типов данных столбца это может привести к ошибкам.

Однако основная проблема заключается в том, что вы не можете выполнять обновления с помощью оператора вставки.Скорее, вам нужно использовать оператор 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равно тому, что хранится в переменной this.name.

Удаление проще, и будет сделано с:

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

при условии, что codonsFullName - это то, что вы хотите удалить на.

Редактировать:

Я отредактировал свой ответ, включив в него одинарные кавычки, которые я забыл включить изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...