Вставить десятичное значение из базы данных c # в базу данных MS Access [duplicate]

Вы можете попробовать функцию get-wmiCustom, размещенную здесь здесь . Было бы неплохо, если бы у get-wmiObject был параметр тайм-аута? Возьмем эту вещь .

39
задан Heinzi 27 March 2018 в 07:31
поделиться

2 ответа

Использовать параметризованный SQL.

Примеры

(Эти примеры приведены в C #, см. ниже для версии VB.NET.)

Замените свои конкатенации строк на @... заполнители, а затем добавьте значения в свой SqlCommand. Вы можете свободно выбирать имя заполнителей, просто убедитесь, что они начинаются с знака @. Ваш пример будет выглядеть так:

var sql = "INSERT INTO myTable (myField1, myField2) " +
          "VALUES (@someValue, @someOtherValue);";

using (var cmd = new SqlCommand(sql, myDbConnection))
{
    cmd.Parameters.AddWithValue("@someValue", someVariable);
    cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text);
    cmd.ExecuteNonQuery();
}

Тот же шаблон используется для других видов операторов SQL:

var sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;";

// see above, same as INSERT

или

var sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;";

using (var cmd = new SqlCommand(sql, myDbConnection))
{
    cmd.Parameters.AddWithValue("@someValue", someVariable);
    using (var reader = cmd.ExecuteReader())
    {
        ...
    }
    // Alternatively: object result = cmd.ExecuteScalar();
    // if you are only interested in one value of one row.
}

Предупреждение: AddWithValue является хорошей отправной точкой и прекрасно работает в большинстве случаев. Однако, что значение, которое вы передаете, должно точно соответствовать типу данных соответствующего поля базы данных. В противном случае вы можете оказаться в ситуации, когда преобразование предотвращает ваш запрос из с помощью индекса . Обратите внимание, что некоторые типы данных SQL Server, такие как char / varchar (без предшествующих «n») или даты, не имеют соответствующего типа данных .NET. В этих случаях вместо следует использовать Add с правильным типом данных.

Зачем мне это делать?

Другие библиотеки доступа к базе данных

44
ответ дан 7 revs 16 August 2018 в 10:13
поделиться
  • 1
    Осторожно с "другим видом" оператор SELECT не будет работать с cmd.ExecuteNonQuery() – Hogan 2 February 2016 в 21:56
  • 2
    @Hogan: Верно. Я подумал о том, чтобы дать более полный пример, но поскольку этот ответ в основном касается перехода от строкового конкатенированного SQL к параметризованному SQL, я не хотел раздувать ответ, добавляя слишком много кода, который «не изменится». (если раньше это был ExecuteScalar, то это ExecuteScalar впоследствии). – Heinzi 2 February 2016 в 22:04
  • 3
    @Heinze - Я думаю, что в особых случаях мне бы хотелось, чтобы в особых случаях говорилось что-то вроде «использования параметров», даже если вы делаете «ExecuteQuery (), ExecuteReader (), ExecuteScalar ()» или другие. – Hogan 2 February 2016 в 23:06
  • 4
    @Hogan: Я немного расширил его. Я все еще пытаюсь держать его коротким . Нет SqlCommand.ExecuteQuery (). – Heinzi 4 February 2016 в 08:28

Пример кода VB.NET

Это пример кода для wiki answer в , если предположить, что Option Strict On и Option Infer On.

INSERT

Dim sql = "INSERT INTO myTable (myField1, myField2) " & 
          "VALUES (@someValue, @someOtherValue);"

Using cmd As New SqlCommand(sql, myDbConnection)
    cmd.Parameters.AddWithValue("@someValue", someVariable)
    cmd.Parameters.AddWithValue("@someOtherValue", someTextBox.Text)
    cmd.ExecuteNonQuery()
End Using

UPDATE

Dim sql = "UPDATE myTable SET myField1 = @newValue WHERE myField2 = @someValue;"

' see above, same as INSERT

SELECT

Dim sql = "SELECT myField1, myField2 FROM myTable WHERE myField3 = @someValue;"

Using cmd As New SqlCommand(sql, myDbConnection)
    cmd.Parameters.AddWithValue("@someValue", someVariable)
    Using reader = cmd.ExecuteReader()
        ' ...
    End Using
    ' Alternatively: Dim result = cmd.ExecuteScalar()
    ' if you are only interested in one value of one row.
End Using
1
ответ дан Heinzi 16 August 2018 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: