Проблемы с типами данных - PullRequest
       81

Проблемы с типами данных

0 голосов
/ 17 апреля 2020

Я пытаюсь вставить новую запись в таблицу с этими полями, но это вызывает у меня «Несоответствие типов данных в выражении критериев» ... Я уже проверил типы, но всегда происходит сбой ...

Не знаю, правильный ли размер поля, какая-нибудь помощь?

    public static void InsertCommand(Veicolo v, string connString)
    {
        using (OleDbConnection connection = new OleDbConnection(connString))
        {
            connection.Open();
            OleDbCommand cmd = new OleDbCommand
            {
                CommandText = "INSERT INTO Veicoli VALUES ('@targa', @automoto,'@marca', '@modello', @cilindrata, @potenzakw," +
                "@immatricolazione,@usato,@kmzero,@kmpercorsi,'@colore',@prezzo,'@imagepath','@caratteristica');",
                Connection=connection
            };
            cmd.Parameters.Add("@targa",OleDbType.VarChar,255).Value= v.Targa;
            cmd.Parameters.Add("@automoto",OleDbType.Boolean,2).Value = (v is Auto);
            cmd.Parameters.Add("@marca", OleDbType.VarChar, 255).Value = v.Marca;
            cmd.Parameters.Add("@modello", OleDbType.VarChar, 255).Value = v.Modello;
            cmd.Parameters.Add("@cilindrata", OleDbType.Integer, 32).Value = v.Cilindrata;
            cmd.Parameters.Add("@potenzakw", OleDbType.Double, 32).Value = v.PotenzaKw;
            cmd.Parameters.Add("@immatricolazione", OleDbType.DBDate, 32).Value = v.Immatricolazione;
            cmd.Parameters.Add("@usato", OleDbType.Boolean, 2).Value = v.IsUsato;
            cmd.Parameters.Add("@kmzero", OleDbType.Boolean, 2).Value = v.IsKmZero;
            cmd.Parameters.Add("@kmpercorsi", OleDbType.Integer, 32).Value = v.KmPercorsi; 
            cmd.Parameters.Add("@colore", OleDbType.VarChar, 255).Value = v.Colore;
            cmd.Parameters.Add("@prezzo", OleDbType.Double, 32).Value = v.Prezzo;
            cmd.Parameters.Add("@imagepath", OleDbType.VarChar, 255 ).Value = v.ImagePath;
            string c = (v is Auto ? (v as Auto).NumeroAirBag.ToString() : (v as Moto).MarcaSella);
            cmd.Parameters.Add("@caratteristica", OleDbType.VarChar, 255).Value =c;
            cmd.Prepare();
            cmd.ExecuteNonQuery();    //ERROR data type mismatch in criteria expression
        }
    }

    public static string createTableVeicoliSqlString =
        $"CREATE TABLE Veicoli (" +
            $"Targa varchar(255) NOT NULL PRIMARY KEY," +
            $"AutoMoto boolean," +
            $"Marca varchar(255)," +
            $"Modello varchar(255)," +
            $"Cilindrata int," +
            $"PotenzaKw double," +
            $"Immatricolazione datetime," +
            $"Usato boolean," +
            $"KmZero boolean," +
            $"KmPercorsi int," +
            $"Colore varchar(255)," +
            $"Prezzo double," +
            $"ImagePath varchar(255)," +
            $"Caratteristica varchar(255)" +
            $");";

1 Ответ

0 голосов
/ 17 апреля 2020

Для этого может быть несколько причин, кроме тех, которые вы исключили:

  1. Одно из ваших свойств в "Veicolo v" имеет значение null, а поле db не может быть пустым.
  2. Ваш скрипт вставки пропустил другое необнуляемое поле, которого нет в вашем коде.
...