既存行の変更と完全行の削除

私は、ボタンをクリックすると、プログラムはテキストボックスから情報全体を取り出し、それが前の特定の行に設定し、Accessデータベースで変更するという手順を作りました。

私は、DataGridViewセル内のコンテンツの1つをクリックすることで完全に動作する動的データバインディングを実行し、行全体の情報を適切なTextBoxに配置します。適切な列名と同様にテキストボックスの名前を定義しました。

私がそれをデバッグすると、プログラムが停止し、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)
    {

    }

  }
}

* EDIT: *あなたのSQLを変更しようとしましたが、 "error list"が書かれています

エラー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コマンドでは、 "値"の後ろに2つのカッコがあり、そのうちの1つは閉じられていません。もう1つは、実際には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がthis.name変数に格納されている行と等しい行をすべて更新します。

削除は簡単で、次のようにして行います。

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

codonsFullNameがあなたが削除したいと思っていると仮定します。

編集:

私は私の答えを編集して、もともとは忘れてしまった一重引用符を含めました。

0
追加された
私がupdayeボタンをクリックしようとすると、次のエラーメッセージが表示されます。System.Data.OleDb.OleDbException(0x80040E10):1つまたは複数の必須パラメータに値を設定できません
追加された 著者 user1017315,
もう一度お返事ありがとうございます。しかし、今度は別のエラーが表示されます: "System.Data.OleDb.OleDbException(0x80040E14):クエリエラーを表す構文エラー(演算子がありません)。"まだSQLの注文を削除しようとしていません
追加された 著者 user1017315,
私はすべての "myInsertQuery"を()に入れ、私は今このエラーを取得します:System.FormatException:インデックスはゼロ以上で、引数リストのサイズより小さくなければなりません。
追加された 著者 user1017315,
ああ、ありがとう!それはperectly動作します!あなたは素晴らしいです!
追加された 著者 user1017315,
完全な行を削除しようとすると、今編集した答えの2番目の部分がプログラムから呼び出されたときに機能するはずです:string myDeleteQuery = "DELETE FROM tblCodons WHERE codonsFullName = '" + this.name + "'";私はもともと元のコメントからエラーを引き起こしていた である単一引用符を含めることを忘れていました。あなたが投稿したエラーは、欠落しているか空であった値があることを示していました。値が一重引用符で囲まれていない場合は間違いなく発生します。あなたが私の編集を試みるなら、それはうまくいくはずです。
追加された 著者 Ben,
コメントを投稿したり、元の質問を編集したものを編集できますか?私が投稿したコードを使用して、私が作ったAccessの単純なテーブルに接続し、codonsFullNameに基づいて行を更新することができます。
追加された 著者 Ben,
ああ、私は誤って閉じ括弧の中に書いている間に残っていたので、冒頭に余分な括弧を入れなければなりませんでした。しかし、新しいエラーが発生する理由は、 codon1.Text、codon3.Text、triplet1.Text、triplet2.Text、の最初の行を失った行のどこかにあることです。これは、文字列で指定されたパラメータの数より少ない数を使用していることを意味します。
追加された 著者 Ben,