BLT 4.1.5 SqlQuery & Firebird
От: Terre Россия http://terre.h15.ru
Дата: 21.09.11 13:36
Оценка:
Есть вот такая таблица:
SET SQL DIALECT 3;

CREATE GENERATOR GEN_USER_ID;

CREATE TABLE "USER" (
    ID          INTEGER NOT NULL,
    FNAME       VARCHAR(32) CHARACTER SET UTF8,
    MNAME       VARCHAR(32) CHARACTER SET UTF8,
    LNAME       VARCHAR(32) CHARACTER SET UTF8,
    "POSITION"  VARCHAR(32) CHARACTER SET UTF8
);

ALTER TABLE "USER" ADD CONSTRAINT PK_USER PRIMARY KEY (ID);

SET TERM ^ ;

CREATE OR ALTER TRIGGER USER_BI0 FOR "USER"
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  new.id = gen_id(gen_user_id, 1);
end
^


SET TERM ; ^



И код:

        [TableName("USER")]
        public class User
        {
            [MapField("ID"), PrimaryKey, NonUpdatable]  public int Id { get; set; }
            [MapField("FNAME")]                         public string FirstName { get; set; }
            [MapField("MNAME")]                         public string MiddleName { get; set; }
            [MapField("LNAME")]                         public string LastName { get; set; }
            [MapField("POSITION")]                      public string Position { get; set; }

            public User() { }

            public User(string FirstName, string MiddleName, string LastName, string Postition)
            {
                this.FirstName = FirstName;
                this.MiddleName = MiddleName;
                this.LastName = LastName;
                this.Position = Position;
            }

            public override string ToString( )
            ...
        }

       static void Main(string[] args)
        {
            
            BLToolkit.Data.DataProvider.FdpDataProvider.QuoteIdentifiers = true;
            DbManager.AddDataProvider(new BLToolkit.Data.DataProvider.FdpDataProvider());
            DbManager.AddConnectionString("Fdp", "Default", @"Data Source=localhost;Database=data.fdb;User Id=SYSDBA;Password=masterkey");

            var q = new SqlQuery<User>(new DbManager("Fdp", "Default"));
            var r = new Random();

            q.Insert(new User("F" + r.NextDouble().ToString(), "M" + r.NextDouble().ToString(), "Kagdila?",
                "TestP" + r.NextDouble().ToString()));
           
            q.DisposeDbManager = true;

            foreach (var x in q.SelectAll())
                Console.WriteLine(x);

            Console.ReadKey();
        }


Проблема в том, что POSITION в базе после вставки записи равен null.
Если вручную написать запрос через DbManager.SetCommand, то все работает.
Куда копать?

P.S.1.: Можно конечно переименовать название таблицы и поля так, чтобы они не совпадали с ключевыми словами...
P.S.2.: Win7, Firebird-2.5.0.26074_1_Win32, VS 2010 Express / Project target .NET 4.0, FirebirdSql.Data.FirebirdClient v 2.5.2.0
Maybe rain,
Maybe snow,
Maybe yes,
Maybe no.
Re: BLT 4.1.5 SqlQuery & Firebird
От: IT Россия linq2db.com
Дата: 21.09.11 14:11
Оценка:
Здравствуйте, Terre, Вы писали:

T>
T>        [TableName("USER")]
T>        public class User
T>        {
T>            [MapField("ID"), PrimaryKey, NonUpdatable]  public int Id { get; set; }
T>            [MapField("FNAME")]                         public string FirstName { get; set; }
T>            [MapField("MNAME")]                         public string MiddleName { get; set; }
T>            [MapField("LNAME")]                         public string LastName { get; set; }
T>            [MapField("\"POSITION\"")]                  public string Position { get; set; }
T>

?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: BLT 4.1.5 SqlQuery & Firebird
От: Terre Россия http://terre.h15.ru
Дата: 21.09.11 14:41
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, Terre, Вы писали:

T>>
T>>            [MapField("\"POSITION\"")]                  public string Position { get; set; }
T>>

IT>?


Вот именно поэтому я сделал так:
BLToolkit.Data.DataProvider.FdpDataProvider.QuoteIdentifiers = true;

(отключать, что по-умолчанию, тоже пробовал)

А если сделать так:

[MapField("\"POSITION\"")]                  public string Position { get; set; }


то

Dynamic SQL Error
SQL error code = -104
Token unknown — line 11, column 3
"POSITION"
Maybe rain,
Maybe snow,
Maybe yes,
Maybe no.
Re: BLT 4.1.5 SqlQuery & Firebird
От: Terre Россия http://terre.h15.ru
Дата: 22.09.11 13:22
Оценка:
После того, как я посмотрел

Console.WriteLine(q.GetSqlQueryInfo(d, typeof(User), "Insert").QueryText);


И увидел, что там все нормально, то нашел вот что

            public User(string FirstName, string MiddleName, string LastName, string Postition)
            {
                this.FirstName = FirstName;
                this.MiddleName = MiddleName;
                this.LastName = LastName;
               this.Position = Position;
            }


Удалите тему, BLT работает нормально...

Maybe rain,
Maybe snow,
Maybe yes,
Maybe no.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.