Firebird

时间:2017-09-27 18:23:24

标签: c# asp.net-mvc ado.net firebird dapper

我正在使用Dapper和ASP.NET MVC(从EF迁移)使用Firebird和PostgreSQL编写多数据库应用程序。在PGSQL数据库中执行CRUD操作的C#语句工作正常。迁移到Firebird时,只需将具体连接对象从NpgsqlConnection更改为FbConnection,尝试插入记录时收到以下错误消息:

  

FirebirdSql.Data.FirebirdClient.FbException:动态SQL错误SQL   错误代码= -104令牌未知 - 第1行,第23列[--->   FirebirdSql.Data.Common.IscException:动态SQL错误SQL错误代码   = -104令牌未知 - 第1行,第23栏

然后,我尝试隔离问题,使用带有FirebirdClient的纯ADO.NET测试insert语句(这很好):

con.Open();
var SQL = "INSERT INTO UNMEDIDA(CD_UNIDADE, NM_UNIDADE, DS_SIGLA)
           VALUES(@CD_UNIDADE, @NM_UNIDADE, @DS_SIGLA);";
var cmd = new FbCommand(SQL, con);
cmd.Parameters.AddWithValue("@CD_UNIDADE", 1);
cmd.Parameters.AddWithValue("@NM_UNIDADE", "AA");
cmd.Parameters.AddWithValue("@DS_SIGLA", "AA");
cmd.ExecuteNonQuery();
con.Close();

之后,使用没有contrib的Dapper,只使用泛型执行(这也可以正常执行):

var SQL = "INSERT INTO UNMEDIDA(CD_UNIDADE, NM_UNIDADE, DS_SIGLA)
           VALUES(@CD_UNIDADE, @NM_UNIDADE, @DS_SIGLA);";
object obj = new { CD_UNIDADE = 1, NM_UNIDADE = "AA", DS_SIGLA = "AA" };
con.Execute(SQL, obj);

当我尝试使用通用插入时出现错误。 Dapper将尝试使用反射到映射类来提取字段名称,以动态构建插入statament。可能由Dapper产生的这种形状有一个sintax错误。以下代码适用于PG和Dapper,但在FB中失败:

[Table("UNMEDIDA")]
public class UNMEDIDA
{
  [ExplicitKey]
  public int CD_UNIDADE { get; set; }
  public string NM_UNIDADE { get; set; }
  public string DS_SIGLA { get; set; }
}
...
UNMEDIDA obj = new UNMEDIDA { CD_UNIDADE = 1, NM_UNIDADE = "AA", DS_SIGLA = "AA" };
con.Insert(obj);

上面的代码适用于Npgsql。

Seens就像参数动态生成中的错误一样。

0 个答案:

没有答案