2017-03-13 27 views
1

書き込み関数を使用してデータベースに値を挿入しようとしていますが、コンパイラが表示されても動作しないようです私はそれを渡そうとしているすべての4つの価値を得ている。ここで私が持っているものです:データの挿入中にINSERT INTOステートメントの構文エラーが発生しました

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Data.OleDb; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      // TODO: This line of code loads data into the 'baseballDataSet.Baseball' table. You can move, or remove it, as needed. 
      this.baseballTableAdapter.Fill(this.baseballDataSet.Baseball); 
      this.myDataGrid.AllowUserToAddRows = false; 
     } 
     private void button1_Click_1(object sender, EventArgs e) 
     { 
      //write 
      System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(); 
      myConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Baseball.accdb;Persist Security Info=False;"; 
      myConnection.Open(); 

      OleDbCommand myCommand = myConnection.CreateCommand(); 
      OleDbTransaction myTrans; 

      // Start a local transaction 
      myTrans = myConnection.BeginTransaction(IsolationLevel.Chaos); 
      myCommand.Connection = myConnection; 
      myCommand.Transaction = myTrans; 

      try 
      { 
       myCommand.CommandText = "INSERT INTO Baseball (PlayerName,Team,JerseyNumber,BattingAverage) VALUES (" + this.textBox1.Text + "," + this.textBox2.Text + ", '" + this.textBox3.Text + "','" + this.textBox4.Text + "');"; 
       label6.Text = myCommand.CommandText; 
       myCommand.ExecuteNonQuery(); 
       myTrans.Commit(); 
       Console.WriteLine("All records are written to database."); 
      } 
      catch (Exception ee) 
      { 
       try 
       { 
        myTrans.Rollback(); 
       } 
       catch (OleDbException ex) 
       { 
        if (myTrans.Connection != null) 
        { 
         Console.WriteLine("An exception of type " + ex.GetType() + 
          " was encountered while attempting to roll back the transaction."); 
        } 
       } 

       label5.Text = "An exception of type " + ee.Message + 
        " was encountered while inserting the data."; 
       label5.Text += "No record was written to database."; 
      } 
      finally 
      { 
       myConnection.Close(); 
      } 
     } 

     private void button2_Click_1(object sender, EventArgs e) 
     { 
      DataTable dataTable; 
      dataTable = new DataTable("myDataGrid"); 
      DataColumn dtCol = null;//Data Column variable 
      DataColumn dtCol2 = null;//Data Column variable 
      DataColumn dtCol3 = null;//Data Column variable 
      DataColumn dtCol4 = null;//Data Column variable 
      DataColumn dtCol5 = null;//Data Column variable 

      dtCol = new DataColumn("ID"); 
      dtCol2 = new DataColumn("PlayerName"); 
      dtCol3 = new DataColumn("Team"); 
      dtCol4 = new DataColumn("JerseyNumber"); 
      dtCol5 = new DataColumn("BattingAverage"); 

      dtCol.DataType = System.Type.GetType("System.Int32"); 
      dtCol.DefaultValue = 0; 
      dataTable.Columns.Add(dtCol); 

      dtCol2.DataType = System.Type.GetType("System.String"); 
      dtCol2.DefaultValue = ""; 
      dataTable.Columns.Add(dtCol2); 

      dtCol3.DataType = System.Type.GetType("System.String"); 
      dtCol3.DefaultValue = ""; 
      dataTable.Columns.Add(dtCol3); 

      dtCol4.DataType = System.Type.GetType("System.Int32"); ; 
      dtCol4.DefaultValue = 0; 
      dataTable.Columns.Add(dtCol4); 

      dtCol5.DataType = System.Type.GetType("System.Double"); ; 
      dtCol5.DefaultValue = 0; 
      dataTable.Columns.Add(dtCol5); 

      DataRow newRow1; 

      string mySelectQuery = "SELECT Id, PlayerName, Team, JerseyNumber, BattingAverage FROM Baseball"; 
      System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(); 
      myConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Baseball.accdb;Persist Security Info=False;"; 
      myConnection.Open(); 

      OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection); 

      OleDbDataReader myReader = myCommand.ExecuteReader(); 
      try 
      { 
       while (myReader.Read()) 
       { 
        newRow1 = dataTable.NewRow(); 
        newRow1[0] = myReader.GetInt32(0); 
        newRow1[1] = myReader.GetString(1); 
        newRow1[2] = myReader.GetString(2); 
        newRow1[3] = myReader.GetInt32(3); 
        newRow1[4] = myReader.GetDouble(4); 

        dataTable.Rows.Add(newRow1); 
       } 
      } 
      finally 
      { 
       myReader.Close(); 
       myConnection.Close(); 
      } 
      this.myDataGrid.DataSource = dataTable; 
     } 

     private void label5_Click(object sender, EventArgs e) 
     { 

     } 

     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

     } 
    } 
} 

しかし、私は適切なボタンを押すことによって、それを実行するために行くとき、ラベルは私が及ぶ、私少なくとも三つの異なる例外エラーを表示するには何が起こっているのか、私を表示するように配置しました「1つまたは複数の必須パラメーターに指定された値がありません」から「INSERT INTOステートメントのエラー」から「構文エラー(不明な演算子)」に変更されました。誰かが私が間違っていることを教えてもらえますか?すべての値が得られているので、何が間違っているのか分かりません。

+2

での単一引用符は、まずSQLインジェクション攻撃をよく読んで、あなたのコードが危険である理由を見に行くべきです。第2に、クエリに文字列入力の引用符がありません。 – DavidG

+0

私はSQLインジェクションを防ぐことを望んでいると理解していますが、これは学校の割り当てのためのものです。私はそれを得る、良い練習とすべて。 – codeNewbie

+0

どちらの方法でも、2番目の点はまだ有効です。 – DavidG

答えて

1
"INSERT INTO Baseball (PlayerName,Team,JerseyNumber,BattingAverage) 
    VALUES (" + this.textBox1.Text + "," + this.textBox2.Text + ", '" + 
    this.textBox3.Text + "','" + this.textBox4.Text + "');"; 

"INSERT INTO Baseball (PlayerName,Team,JerseyNumber,BattingAverage) 
    VALUES ('" + this.textBox1.Text + "','" + this.textBox2.Text + "','" + 
    this.textBox3.Text + "','" + this.textBox4.Text + "');"; 

注this.textBox1.Textとthis.textBox2.Text

+0

ああお元気ですか? – codeNewbie

関連する問題