我面临实现查询插入 dbf 的挑战。我正在研究 C#。如果我在 Sql 中使用查询工作正常,但在 VFPOLEDB 上则不行。问题是我不知道如何让它发挥作用。
好的。这就是我所实施的尝试,看看是否有效。 我的询问:
string query = "INSERT INTO relojj (id, numdoc, fecha, maquina, tipo, veces, sucursal, transf, forma, audito, newfld ) " +
"VALUES (@id,@numdoc,@fecha,@maquina,@sucursal," +
"IIF((SELECT COUNT(id) FROM relojj WHERE numdoc=@numdoc and fecha=@fecha)%2=0 , 'E', 'S')," +
"(SELECT COUNT(id) FROM relojj WHERE numdoc=@numdoc and fecha=@fecha)," +
"@sucursal,@transf,@forma,@audito,@newfld)";
然后我有一个实例命令将这些值插入到 dbf 中
command.Parameters.Add("id", OleDbType.VarChar, 5).Value = "1";
command.Parameters.Add("numdoc", OleDbType.Decimal).Value = 1;
command.Parameters.Add("fecha", OleDbType.Date).Value = fecha;
command.Parameters.Add("maquina", OleDbType.VarChar, 10).Value = "Reloj Rio Grande";
//command.Parameters.Add("tipo", OleDbType.VarChar, 10).Value = "tipo";
//command.Parameters.Add("veces", OleDbType.Decimal).Value = 1;
command.Parameters.Add("sucursal", OleDbType.VarChar, 10).Value = "sucursal";
command.Parameters.Add("transf", OleDbType.Date).Value = transf;
command.Parameters.Add("forma", OleDbType.VarChar, 10).Value = "R";
command.Parameters.Add("audito", OleDbType.VarChar, 10).Value = "Alta Automatica";
command.Parameters.Add("newfld", OleDbType.VarChar, 10).Value = "newfld";
但是一旦我尝试了它,它就会显示一个错误,让我知道我有 Sintaxis 错误。如果我有一个正常的查询运行正常,但 Iff 甚至 When 情况下,不起作用。 任何想法。 谢谢
VFPOLEDB 是 OLEDB 提供程序,它不是 SQL 服务器。它不支持命名参数,这就是您收到语法错误的原因。您需要将所有这些命名参数替换为位置参数(所有以 @ 到 ? 开头的参数)。由于它不支持命名参数,而仅支持位置参数,因此您需要多次提供相同的参数,例如@numdoc,并且需要按顺序执行此操作(?与其位置匹配)。您的查询有点令人困惑,并且对于 SQL Server 或其他后端来说也不合适(您正在为 Tipo 插入 sucursal?作为示例),假设这些是拼写错误,您的查询将看起来像(而不是字符串连接,逐字字符串的可读性更好):
string query = @"INSERT INTO relojj
(id, numdoc, fecha, maquina, tipo, veces,
sucursal, transf, forma, audito, newfld )
VALUES
(?,?,?,?,?,?
IIF((SELECT COUNT(id) FROM relojj WHERE numdoc=? and fecha=?)%2=0 , 'E', 'S'),
(SELECT COUNT(id) FROM relojj WHERE numdoc=? and fecha=?),
?,?,?,?,?)";
command.Parameters.Add("id", OleDbType.VarChar, 5).Value = "1";
command.Parameters.Add("numdoc", OleDbType.Decimal).Value = 1;
command.Parameters.Add("fecha", OleDbType.Date).Value = fecha;
command.Parameters.Add("maquina", OleDbType.VarChar, 10).Value = "Reloj Rio Grande";
command.Parameters.Add("tipo", OleDbType.VarChar, 10).Value = "tipo";
command.Parameters.Add("veces", OleDbType.Decimal).Value = 1;
command.Parameters.Add("numdoc1", OleDbType.Decimal).Value = 1;
command.Parameters.Add("fecha1", OleDbType.Date).Value = fecha;
command.Parameters.Add("numdoc2", OleDbType.Decimal).Value = 1;
command.Parameters.Add("fecha2", OleDbType.Date).Value = fecha;
command.Parameters.Add("sucursal", OleDbType.VarChar, 10).Value = "sucursal";
command.Parameters.Add("transf", OleDbType.Date).Value = transf;
command.Parameters.Add("forma", OleDbType.VarChar, 10).Value = "R";
command.Parameters.Add("audito", OleDbType.VarChar, 10).Value = "Alta Automatica";
command.Parameters.Add("newfld", OleDbType.VarChar, 10).Value = "newfld";
编辑:请注意,参数名称仅供开发人员使用,所有参数均按其位置顺序匹配。