2016-06-22 11 views
0

私はMS Accessのテーブルにデータを挿入しようとしています。 SQLステートメントの終わりに、セミコロン(;)が見つかりません。または私の挿入クエリが値またはテーブルを持つ必要があると言っている別のエラー。ここに私のコードC#の挿入構文エラー

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; 
using System.Data.SqlClient; 



namespace MiddleWare 
{ 
public partial class Sales : Form 
{ 
    public Sales() 
    { 
     InitializeComponent(); 
    } 

    private void btnUpdate_Click(object sender, EventArgs e) 
    { 
     int empId = int.Parse(txtEmpID.Text); 
     string cmdText = @"INSERT INTO [Sales] 
         ([Printers], [Ink], [Paper]) 
       VALUES (@Printers,@Ink,@Paper) 
       SELECT @EmpID FROM (Emplopyee)"; 

     using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\cp-stud-nas1\users\mat72462\Documents\SalesData.accdb")) 
     using (OleDbCommand cmd = new OleDbCommand(cmdText, con)) 
     { 
      con.Open(); 
      cmd.Parameters.AddWithValue("@Printers", OleDbType.VarWChar).Value = txtPrinters.Text; 
      cmd.Parameters.AddWithValue("@Ink", OleDbType.VarWChar).Value = txtInk.Text; 
      cmd.Parameters.AddWithValue("@Paper", OleDbType.VarWChar).Value = txtPaper.Text; 
      cmd.Parameters.AddWithValue("@EmpID", OleDbType.VarWChar).Value = txtEmpID.Text; 
      cmd.ExecuteNonQuery(); 

      cmd.Parameters.Clear(); 
      cmd.Parameters.AddWithValue("@EmpID", txtEmpID.Text); 

      cmd.CommandText = "SELECT [Total Sales] FROM Sales WHERE [email protected]"; 
      string result = cmd.ExecuteScalar().ToString(); 
      MessageBox.Show(result); 

     } 
    } 

    private void Sales_Load(object sender, EventArgs e) 
    { 
     // TODO: This line of code loads data into the 'DataSet1.DataTable1' table. You can move, or remove it, as needed. 
     this.DataTable1TableAdapter.Fill(this.DataSet1.DataTable1); 






    } 

    private void btnReport_Click(object sender, EventArgs e) 
    { 
     OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\cp-stud-nas1\users\mat72462\Documents\SalesData.accdb"); 

     { 
      this.DataTable1TableAdapter.Fill(this.DataSet1.DataTable1); 

      this.reportViewer1.RefreshReport(); 
     } 
    } 
} 
} 
+2

代わりにエラーメッセージを伝えるのあなたは、正確なものを表示することができます。 –

答えて

0

はまた、あなたは、パラメータとして、列名を渡すことはできませんセミコロン

string cmdText = @"INSERT INTO [Sales] 
       ([Printers], [Ink], [Paper]) 
     VALUES (@Printers,@Ink,@Paper); 
     SELECT @EmpID FROM (Emplopyee)"; 

でクエリを区切る必要があります。その場合、動的クエリを使用します。

+0

私は同じエラーを受け取ります –

+0

だから、同じエラーが欲しいですか? –

+0

エラー:SQL文の終了後に文字が見つかりました。 –

0

あなたはこれにクエリを変更する必要があります。

string cmdText = @"INSERT INTO [Sales] 
        ([Printers], [Ink], [Paper], [EmpID]) 
      VALUES (@Printers,@Ink,@Paper, 
        SELECT EmpID FROM (Employee))"; 
+0

私はこの質問を使用するときにエラーが発生します:関連するレコードがテーブル '従業員'に必要なので、レコードを追加または変更できません。 –

+0

次のエラーが表示されます。クエリ式 'SELECT @EmpID FROM(Emplopyee)'の構文エラーです。 –

+0

empID – Zeek

0

それは最も可能性の高いお読みください:

string cmdText = @"INSERT INTO [Sales] 
    ([Printers], [Ink], [Paper], [EmpID]) 
    VALUES (@Printers, @Ink, @Paper, @EmpID)"; 
+0

それは私にエラーをもたらします:インデックス、主キー、または関係に重複した値を作成するため、テーブルに要求した変更は成功しませんでした。 –

+0

を含むフィールドのデータを変更します。ユーザーがIDと売上を入力するフォームです。従業員ID –

+0

に基づいて、その従業員の売上を挿入します。Salesのテーブルデザインを確認します。複数の従業員が多数の販売を行うことができるため、EmpIDは主キーであってはいけません。 Salesの自己番号はPKでなければなりません。 – Parfait

0

"cmd.Paramter.AddWithValueを" 不要です。

cmd = "INSERT INTO [Sales] ([Printers], [Ink], [Paper]) 
    VALUES (" + txtPrinters.Text + " ," + txtInk.Text + ", " + txtPaper.Text + ") 

これは、値を複製または上書き "cmd.Paramter.AddWithValue" の混乱をクリアして、あなたのcmdTextをフォーマットしてください。

リライトbtnUpdate_Click(もEmplopyeeがタイプミスであるかどうかわからない)

private void btnUpdate_Click(object sender, EventArgs e) 
{ 
    using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\cp-stud-nas1\users\mat72462\Documents\SalesData.accdb")) 
    using (OleDbCommand cmd = new OleDbCommand(cmdText, con)) 
    { 
     con.Open(); 
     cmd = "INSERT INTO [Sales] ([Printers], [Ink], [Paper]) VALUES (" + txtPrinters.Text + " ," + txtInk.Text + ", " + txtPaper.Text + ") SELECT " + textEmpID.Text + " FROM (Emplopyee)"; 
     cmd.ExecuteNonQuery(); 

     cmd.CommandText = "SELECT [Total Sales] FROM Sales WHERE [email protected]"; 
     string result = cmd.ExecuteScalar().ToString(); 
     MessageBox.Show(result); 

    } 
} 
+0

私はcmd.Paramter.AddWithValue行を取り除かなければならないならば、どこに文字列cmdtext行を置くべきですか? –

+0

cmdText行は、テキストフィールドが必要な値である点に書き出される必要があります。例: ボタン 初期cmdText が、私はそれが欠けているというエラーを取得するクエリを実行し – Sascreama

+0

のClicked。 –

関連する問題