Несоответствие типов данных в выражении критериев - PullRequest
0 голосов
/ 22 марта 2011

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

                        query = "INSERT INTO printers (" +
                            "hostname," +
                            "ip_address," +
                            "model," +
                            "picture_id," +
                            "connect_type," +
                            "status," +
                            "product_number," +
                            "Floor_ID," +
                            "print_corner," +
                            "serial_number," +
                            "printer_features" +
                            ") VALUES ('" +
                            exp.Devices[i].HostName.ToString() + "', '" +
                            exp.Devices[i].IpAddress.ToString() + "', '" +
                            exp.Devices[i].Model.ToString() + "', '" +
                            exp.Devices[i].PictureId.ToString() + "', '" +
                            exp.Devices[i].ConnectType.ToString() + "', '" +
                            exp.Devices[i].Status.ToString() + "', '" +
                            exp.Devices[i].ProductNumber.ToString() + "', '" +
                            exp.Devices[i].Floor.ToString() + "', '" +
                            exp.Devices[i].PrintCorner.ToString() + "', '" +
                            exp.Devices[i].SerialNumber.ToString() + "', '" +
                            exp.Devices[i].PrinterFeatures.ToString() +
                            "')";


        connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + confParams.MpaSearchDatabase;

        OleDbConnection conn = new OleDbConnection(connectionString);
                        OleDbCommand myCommand = new OleDbCommand(query);
                        myCommand.Connection = conn;
                        conn.Open();
                        myCommand.ExecuteNonQuery();
                        conn.Close();
                        insertedPrintersCount = insertedPrintersCount + 1;

                        Utils.Logger.Info("Device inserted: " + exp.Devices[i].HostName);

help!

1 Ответ

2 голосов
/ 22 марта 2011

Ошибка несоответствия типов данных указывает на то, что запрос ожидает данные одного типа, но вы предоставляете другой. Это выражение запроса передает каждое значение как литерал string, но несколько столбцов указывают, что они, вероятно, являются числовым значением. ProductNumber и SerialNumber например.

Для правильной передачи значений (и предотвращения простых атак с использованием инъекций) вы захотите использовать класс OleDbCommand для создания вызова со значениями правильного типа. Затем позвольте базовой инфраструктуре преобразовать ее в соответствующие значения.

...