2017-11-19 24 views
1

Hier ist der Fehler:dynamische SQL-Fehler SQL-Fehlercode = -104 Token unbekannt

Dynamic SQL Error  
SQL error code = -104  
Token unknown - line 1, column 162  
VALUE 

Hier ist der Code:

using (FbDataAdapter da = new FbDataAdapter(@"SELECT DOC_ITEMS.ID, PRODUCTS.PRODUCTKEY, PRODUCTS.NAME, DOC_ITEMS.QUANTITY, UNITS.UNIT, DOC_ITEMS.PRICE, DOC_ITEMS.TAX, (DOC_ITEMS.PRICE * DOC_ITEMS.QUANTITY) AS VALUE 
         FROM PRODUCTS INNER JOIN 
         DOC_ITEMS ON PRODUCTS.PRODUCTID = DOC_ITEMS.PRODUCTID INNER JOIN 
         UNITS ON PRODUCTS.UNITID = UNITS.UNITID 
         WHERE (DOC_ITEMS.DOCUMENTID = @DocumentID)", con)) 

{ 
    da.SelectCommand.Parameters.AddWithValue("@DocumentID", documentId); 

    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    dataGridView1.DataSource = dt; 

    dataGridView1.Columns["PRODUCTKEY"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
    dataGridView1.Columns["ID"].Visible = false; 
    dataGridView1.Columns["NAME"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; 
    dataGridView1.Columns["QUANTITY"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
    dataGridView1.Columns["QUANTITY"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; 
    dataGridView1.Columns["UNIT"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
    dataGridView1.Columns["PRICE"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
    dataGridView1.Columns["PRICE"].DefaultCellStyle.Format = "0.00 $"; 
    dataGridView1.Columns["TAX"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
    dataGridView1.Columns["TAX"].DefaultCellStyle.Format = "0\\%"; 
    dataGridView1.Columns["VALUE"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
    dataGridView1.Columns["VALUE"].DefaultCellStyle.Format = "0.00 $"; 
} 

Wenn ich diesen Befehl durch meine Datenbank laufen direkt es funktioniert ok, aber in meinem C# code fällt dieser Fehler.

Antwort

1

Verwenden Sie ""VALUE"" mit doppelten Anführungszeichen, da ein Zitat Ihre Zeichenfolge schließt.

1

VALUE ist ein reserved word in Firebird, dh es kann nicht in einer Abfrage als Objektname verwendet werden. Sie müssen entweder einen anderen Namen verwenden oder ihn explizit als "VALUE" angeben, damit der Abfrageparser weiß, dass es sich nicht um ein reserviertes Wort handelt.