如何向DBF文件(foxpro)中插入数据

5

我在asp.net中有如下代码:

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();

但是我遇到了以下错误:

语法错误


我认为在字符串中查找地址后面的内容......请帮帮我。 - Masoud Zayyani
WorkRoomNo 是一个常量整数。 - Masoud Zayyani
2个回答

7
除了Chris提供的内容,您在CREATE TABLE中以空字符串变量开始,然后对其进行+=操作。据我所记,NULL +=“任何字符串”将保持为空值... 您可能正在此处崩溃。
虽然VFP不像其他SQL引擎那样容易受到SQL注入的攻击,但是按照良好习惯使用参数化是一个好习惯。当您这样做时,请使用“?”作为要插入的值的占位符,并按照相同顺序添加参数,如“?”所代表的顺序。
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(); 

3
首先,在遇到错误时,通常最好发布您收到的完整错误消息。
此外,在尝试调试查询问题时,应发出实际发送到服务器/数据库的查询并进行检查。这样可以找到各种问题,例如逗号过多。
顺便说一下,看看您的代码,您正在连接字符串,但似乎逗号太多了。
生成的查询将如下所示:
insert into DSKKAR00(DSK_ID, DSK_KIND, MON_PYM) VALUES( X,1, ,)

其中X是您的WorkRoomNo变量的值。

显然,这不是有效的语法,会导致您看到的错误。逗号表示有4个值被传递,但插入查询仅标识了3个列。

下一个问题与列定义本身有关。该表的第一列是c(10);第三列是c(3)。我有点生疏,但那些不是字符字段吗?

如果是这样,那么您需要调整字符串生成器以在值周围添加适当的引号...

这带我们来到最后一个问题:不要使用字符串连接来构建查询。使用参数化查询


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接