Многократное использование SqlCommand?

Я исправил свою проблему следующим образом:

Dim Row as object = From cell In ws.SelectedRange("A1:B64")
                    Where cell.Value <> Nothing AndAlso cell.Value.ToString().Equals("any text")
                    Select cell.Start.Row
42
задан John Saunders 1 May 2015 в 19:57
поделиться

2 ответа

Да. Вы захотите удостовериться, что Вы называете myCommand. Параметры. Ясный между каждым вызовом для дампа параметров, но нет ничего мешающего Вам снова использовать объект. (Я часто не использую C#, таким образом, это может иметь ошибку или два в тексте)

myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
myConn = new SqlConnection(myConStr);
myConn.Open();

myCommand = new System.Data.SqlClient.SqlCommand("team5UserCurrentBooks3", myConn); 
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@book_id", bookID);
myCommand.Parameters.AddWithValue("@user_id", userID);
myCommand.ExecuteNonQuery();

myCommand.Parameters.Clear();
myCommand.CommandText= "NewStoredProcedureName";
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@foo_id", fooId);
myCommand.Parameters.AddWithValue("@bar_id", barId);
mycommand.ExecuteNonQuery();

myCommand.Parameters.Clear();
myCommand.CommandText = " SELECT * FROM table1 WHERE ID = @TID;"
myCommand.CommandType = CommandType.Text;
myCommand.Parameters.AddWithValue("@tid", tId);
SqlReader rdr;
rdr = myCommand.ExecuteReader();
54
ответ дан Stephen Wrighton 26 November 2019 в 23:50
поделиться

Да! Можно определенно сделать это. В функции можно снова использовать то же соединение также (я не рекомендую снова использовать объект соединения для больших объемов, но это возможно).

Вы могли также сделать что-то вроде этого:

myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
using (var cn = new SqlConnection(myConStr) )
using (var cmd = new SqlCommand("team5UserCurrentBooks3", cn) ) 
{
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@user_id", SqlDbType.Int).Value = userID;
    cmd.Parameters.Add("@book_id", SqlDbType.Int);
    cn.Open();

    for(int i = 0; i<10; i++)
    {
        cmd.Parameters["@book_id"].Value = i;
        cmd.ExecuteNonQuery();
    }
}

Это будет выполнять запрос 10 раз и использовать тот же user_id каждый раз, когда он выполняется, но изменение book_id. using блок точно так же, как обертывает Ваше соединение в попытку/выгоду удостовериться, что это закрывается.

13
ответ дан Joel Coehoorn 26 November 2019 в 23:50
поделиться