programing

SqlCommand를 재사용하시겠습니까?

mailnote 2023. 9. 3. 16:30
반응형

SqlCommand를 재사용하시겠습니까?

저는 이것이 가능한지 아닌지 정말 확신할 수 없습니다.

저는 현재 대학 프로젝트를 진행하고 있으며 저장 프로시저를 사용하는 기능을 가지고 있습니다.저는 같은 것을 가져갈 수 있는지 알고 싶습니다.SqlCommand업데이트된 매개 변수를 인스턴스화하고 적용하여 동일한 함수 내에서 저장 프로시저를 다시 호출합니다.

내 코드에 다음과 같은 것이 있다고 가정해 보겠습니다.

myConStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;
myConn = new SqlConnection(myConStr);
myCommand = new System.Data.SqlClient.SqlCommand("team5UserCurrentBooks3", myConn); 
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.AddWithValue("@book_id", bookID);
myCommand.Parameters.AddWithValue("@user_id", userID);

try
{
    myConn.Open();
    myCommand.ExecuteNonQuery();

업데이트가 가능합니까?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();

네! 분명히 그렇게 할 수 있습니다.함수 내에서도 동일한 연결을 다시 사용할 수 있습니다(더 큰 범위에서는 연결 개체를 다시 사용하지 않는 것이 좋지만 가능합니다).

다음과 같은 작업도 수행할 수 있습니다.

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차단은 연결이 닫혀 있는지 확인하기 위해 시도/이벤트로 연결을 감싸는 것과 같습니다.

언급URL : https://stackoverflow.com/questions/670407/reusing-sqlcommand

반응형