2012-02-08 23 views
5

tengo el siguiente código en asp.net:para insertar en archivos 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(); 

Pero he el siguiente error:

Syntax error

+0

Creo que para la Dirección Después En cadena ....... me ayude por favor –

+0

WorkRoomNo es constante entera –

Respuesta

7

Además de lo que Chris ha ofrecido, está comenzando su CREATE TABLE con una variable de cadena NULL, y luego haciendo un + = a ella. Por lo que recuerdo, un NULL + = "anystring" seguirá siendo un valor nulo ... Es posible que también esté cayendo.

Aunque VFP no es realmente compatible con SQL Injection como otros motores SQL, es una buena costumbre hacer parametrizaciones. Cuando lo haga, use "?" como marcador de posición para el valor que desea insertar, y agregue parámetros en la misma secuencia de orden que el "?" representar.

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

En primer lugar, en cualquier momento que tenga un error, generalmente es mejor publicar el mensaje de error entero que recibe de.

Además, al intentar depurar un problema de consulta, debe emitir la consulta real que se envía a su servidor/base de datos e inspeccionarla. De esta forma puedes encontrar varios problemas como demasiadas comas.

Hablando de eso, mirando su código, está concatenando una Cadena y realmente parece que tiene demasiadas comas.

La consulta emitida parece que va a ser:

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

donde X es el valor de la variable de WorkRoomNo.

Obviamente, esa no es una sintaxis válida y provocaría el error que ha visto. Las comas indican que se pasan 4 valores, pero la consulta de inserción solo identifica 3 columnas.

El siguiente problema tiene que ver con las definiciones de las columnas en sí. La primera columna de esa tabla es una c (10); el tercero es un c (3). Estoy un poco oxidado, pero ¿no son esos campos de personajes?

Si es así, entonces usted necesita ajustar su generador de cadenas de añadir las comillas apropiadas alrededor de los valores ...

Lo que nos lleva al problema final: No utilice cuerdas concatenación para construir consultas. Use Parameterized queries

Cuestiones relacionadas