Понимание растровых индексов в postgresql

Вы должны использовать параметры SQL. Это не только упростит ваш код, но и сделает некоторые виды ошибок в отношении синтаксиса и типов данных крайне маловероятными и защитит от атак SQL-инъекций:

Dim sql =  
        UPDATE tblPatientsRecord SET [Names] = @p1,
                Licensenumber = @p2, 
                Address = @p3,
                Fullname = @p4,
                Birthday = @p5, 
                [Age] = @p6,
                Country = @p7
        WHERE PatientID = @p8
        .Value

Using conn = New OleDbConnection(myConnStr),
        cmd As New OleDbCommand(sql, conn)

    conn.Open()

    cmd.Parameters.Add("@p1", OleDbType.VarChar).Value = txtNames.Text
    cmd.Parameters.Add("@p2", OleDbType.VarChar).Value = txtLicensenumber.Text
    ' ...etc
    cmd.Parameters.Add("@p6", OleDbType.Integer).Value = intVar
    cmd.Parameters.Add("@p7", OleDbType.VarChar).Value = strVar

    'the last one is the WHERE
    cmd.Parameters.Add("@p8", OleDbType.VarChar).Value = Convert.ToInt32(lblPatientID.Text)

    cmd.ExecuteNonQuery()
    '... etc

End Using

Есть несколько других часто встречающиеся проблемы, к которым следует стремиться.

  1. Объекты DBConnection предназначены для создания, использования и удаления, а не для тех, которые используются снова и снова. Однако вы можете использовать глобальную строку соединения, чтобы у вас не было одинаковой строки соединения повсюду.
  2. Многие из DBObjects должны быть удалены. Блоки Using будут закрываться и удалять объекты соединения и команды. Как правило, если что-то имеет метод Dispose, оберните их в блок Using. Выше показано, как «стекать» 2 объекта (OleDbConnection и OleDbCommand) в один оператор Using, который уменьшает отступ.
  3. Используйте метод Add, а не AddWithValue. Это позволяет вам указать тип данных для каждого параметра. Без этого поставщик БД должен угадать, что может привести к Datatype mismatch или даже повредить базу данных в некоторых случаях.
  4. Предложение WHERE - это еще один параметр. Часто люди используют параметры для первой части SQL, но конкатенация для предложения WHERE бесполезно.
  5. Вышеупомянутый также использует литерал XML для построения SQL. Это удобно для длительного сложного SQL, потому что вы можете форматировать и отступать по своему усмотрению. Вы также можете использовать несколько строк, чтобы сделать их доступными для чтения: Dim sql = "UPDATE tblPatientsRecord SET [Names] = @p1, " _ & "Licensenumber = @p2, " _ & "Address = @p3, "
  6. Если вы используете зарезервированные слова SQL или пробелы в именах таблиц или столбцов, вы должны избегать имен, используя [Square Brackets], как показано. Лучше не использовать ни в именах. User, Password Names и Values обычно встречаются слова, используемые в качестве имен столбцов или таблиц, которые приводят к ошибкам синтаксиса SQL.
  7. Клещи - это не универсальные разделители полей SQL, они фактически указывают, что переданное значение является строкой / текстом: & "Age ='" & txtAge.Text & "'". Если БД установлено для хранения Age как числа, ваш SQL передает его как текст / строку, что может привести к data type mismatch. То же самое относится к PatientID и Birthday, если это поле даты. Общей проблемой конкатенации строк для операторов SQL является слишком много или слишком мало тиков (') в результате. Эта возможность не выполняется с параметрами SQL.

Основная цель для SQL-параметров - это предотвратить ошибку, если имя «O'Brian» или «O'Reilly» или «Bobby»; DROP TABLE tblPatientsRecord "

Эти принципы применяются для других поставщиков БД, таких как MySql, SQLite и SQLServer. Однако такие детали, как точный символ эвакуации, будут различаться.

Обратите внимание, что Access / OleDB фактически не использует имена параметров (@FirstName или даже @p2), , поэтому часто видят параметры в форме «?». Это означает, что вы должны добавить значения параметров (Add / AddWithValue) в том же точном порядке, что и те столбцы, которые отображаются в SQL.

Для получения дополнительной информации см .:

13
задан maahl 23 October 2018 в 20:30
поделиться