Sql вставить или обновить - PullRequest
2 голосов
/ 04 июля 2011

Мне нужно быстро написать код для вставки / обновления данных SQL.В классическом ASP / VBScript я мог бы сделать это, как показано ниже:

  Set rs = Server.CreateObject("adodb.Recordset")
  sql = "SELECT * FROM _table WHERE id=" & id 
  rs.Open sql, cn, 1, 3 

  If rs.recordcount = 0 Then 
    rs.AddNew 
  End If 

  rs("data") = data

  rs.Update 
  rs.Close 

Каким может быть ближайший порт C # этого фрагмента кода?Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Предполагается, что MS-SQL:

using (SqlConnection conn = new SqlConnection("Connection String"))
using (SqlCommand comm = new SqlCommand("INSERT INTO MyTable (Name, Age) VALUES (@name, @age)", conn))
{    
    conn.Open();

    comm.Parameters.AddWithValue("@name", "Adam");
    comm.Parameters.AddWithValue("@age", 25);

    comm.ExecuteNonQuery();
}

Строка соединения, очевидно, нуждается в уточнении, а параметризованный SQL требует подтверждения, но это начало того, что вам нужно.

Вам не нужно беспокоиться о закрытии, поскольку оператор using сделает это за вас.

Обновление: не очень хорошо зная классический ASP, я должен уточнить, что этот код выполняет только вставку, а не обновление. Если вам нужно выполнить обновление, измените SQL, чтобы использовать синтаксис обновления.

2 голосов
/ 04 июля 2011

Надеюсь, это поможет вам начать. Сделайте ссылку на класс ADODB:

ADODB.Connection cn = new ADODB.Connection();
cn.Open("Provider=etc...", null, null, 0);
ADODB.Recordset rs = new ADODB.Recordset();

String sql = "SELECT * FROM _table WHERE id=" & id;
rs.Open(sql, cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, -1);

if (rs.RecordCount == 0)
  rs.AddNew;

rs("data") = data;
rs.Update();
rs.Close();
cn.Close();
...