2012-02-08 15 views
5

ho il seguente codice in asp.net:Come inserire nel file DBF (FoxPro)

using (OleDbCommand command = dbConnW.CreateCommand()) 
{ 
    string CreateTableK = null; 
    CreateTableK += "Create Table DSKKAR00 (DSK_ID c(10),DSK_KIND N(1),MON_PYM C(3))"; 
    OleDbCommand cmdCreateTable = new OleDbCommand(CreateTableK, dbConnW); 
    cmdCreateTable.ExecuteNonQuery(); 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append(WorkRoomNo + ","); 
    sb.Append("1,"); 
    sb.Append(","); 
    OleDbCommand cmd3 = new OleDbCommand("Insert into DSKKAR00 (DSK_ID,DSK_KIND,MON_PYM) Values (" + sb.ToString() + ")", dbConnW); 
    cmd3.ExecuteNonQuery(); 

Ma ho il seguente errore:

Syntax error

+0

Credo che per Dopo Indirizzo In stringa ....... help me please –

+0

WorkRoomNo è costante intera –

risposta

7

In aggiunta a ciò che Chris ha offerto, stai iniziando la tua CREATE TABLE con una variabile di stringa NULL, quindi facendo un + = ad essa. Da quello che ricordo, un NULL + = "anystring" rimarrà un valore nullo ... Potresti andare in crash proprio lì.

Sebbene VFP non sia realmente suscettibile di SQL Injection come altri motori SQL, è buona norma eseguire la parametrizzazione. Quando lo fai, usa "?" come segnaposto per il valore che si desidera inserire e aggiungere parametri nella stessa sequenza di ordine del "?" rappresentare.

string CreateTableK = 
    "Create Table DSKKAR00 (DSK_ID c(10),DSK_KIND N(1),MON_PYM C(3))";  

OleDbCommand cmdCreateTable = new OleDbCommand(CreateTableK, dbConnW); 
cmdCreateTable.ExecuteNonQuery();  

string MyInsert = 
    "insert into DSKKAR00 (dsk_id, dsk_kind, mon_pym) values (?, ?, ?)"; 
OleDbCommand cmd3 = new OleDbCommand(MyInsert, dbConnW); 
cmd3.Parameters.AddWithValue("parmSlot1", WorkRoomNo); 
cmd3.Parameters.AddWithValue("parmSlot2", 1); 
cmd3.Parameters.AddWithValue("parmSlot3", 'tst'); // or whatever variable to put 
cmd3.ExecuteNonQuery(); 
+0

Tanx ............. veryyyy –

3

Prima di tutto, ogni volta che avete un errore è solitamente meglio pubblicare il messaggio di errore intero che si ottiene.

Inoltre, quando si tenta di eseguire il debug di un problema di query, è necessario emettere la query effettiva inviata al server/database e ispezionarla. In questo modo puoi trovare vari problemi come troppe virgole.

A proposito, guardando il tuo codice, stai concatenando una stringa e sembra davvero che tu abbia troppe virgole.

La query emessa sembra che sarà:

insert into DSKKAR00(DSK_ID, DSK_KIND, MON_PYM) VALUES(X,1, ,) 

dove X è il valore della variabile WorkRoomNo.

Ovviamente, questa non è una sintassi valida e comporterebbe l'errore che si è verificato. Le virgole indicano che sono stati passati 4 valori, ma la query di inserimento identifica solo 3 colonne.

Il prossimo numero ha a che fare con le definizioni delle colonne stesse. La prima colonna di quella tabella è una c (10); il terzo è un c (3). Sono un po 'arrugginito, ma non sono quei campi dei personaggi?

Se è così allora è necessario regolare il vostro costruttore stringa da aggiungere le citazioni appropriate attorno ai valori ...

Il che ci porta al problema finale: Non utilizzare String concatenazione per creare query. Usa Parameterized queries

Problemi correlati