복붙노트

[SQL] C #에서 저장된 프로 시저에서 여러 레코드를 반환

SQL

C #에서 저장된 프로 시저에서 여러 레코드를 반환

전 C #으로 ASP 고전적인 시스템을 변환하는 데

나는 (전달 된 매개 변수에 따라) 7 개 레코드까지 반환 할 수 있습니다 저장 프로 시저가 있습니다.

나는 여러 SQL 문을 실행하고 여러 어댑터를 사용할 필요없이 그것의 끝에 도착하면 다음의 DataTable을 건너 뛰는,이 단순히 루프 무엇을 내가 할 수있는 개별 DataTables으로 모든 레코드를 반환 할 수있는 방법을 알 필요가있다. 데이터 집합으로 각 테이블을 추가 할 수있는 문을 입력합니다.

고전에서는 간단한 할 일 동안 내가 다음 문으로 이동 루프의 끝에있어 objRS.NextRecordset ()하지 objRS.EOF 루프.

나는 현재 다시 종료 코드의 총 재 작성을 필요로하지 않습니다를 사용할 수 있습니다 무엇인가?

각 레코드는 열과 행의 다른 번호를 가지고있다. 그들은 서로 관련이없는. 우리는 트래픽을 줄이기 위해 저장된 프로 시저의 여러 레코드를 반환합니다.

예를 들면 좋을 것이다.

감사

해결법

  1. ==============================

    1.

    SqlConnection con=new SqlConnection("YourConnection String");
    SqlCommand cmd=new SqlCommand();
    SqlDataAdapter da=new SqlDataAdapter();
    DataSet ds = new DataSet();
    cmd = new SqlCommand("name of your Stored Procedure", con);
    cmd.CommandType = CommandType.StoredProcedure;
    //cmd.Parameters.AddWithValue("@SuperID", id);//if you have parameters.
    da = new SqlDataAdapter(cmd);
    da.Fill(ds);
    con.Close();
    

    이 후에는 사용하여 다른 (7) 레코드를 활용할 수 있습니다

    ds.Tables[0]
    ds.Tables[1]
    ds.Tables[2]
    ds.Tables[3]
    ds.Tables[4]
    ds.Tables[5]
    ds.Tables[6]
    
  2. ==============================

    2.당신이 SqlDataAdapter.Fill를 (사용하여 데이터 집합을 채울 경우) 방법은 저장 프로 시저에서 반환 된 레코드 집합의 각 데이터 집합 내에서 DataTable을 반환한다

    당신이 SqlDataAdapter.Fill를 (사용하여 데이터 집합을 채울 경우) 방법은 저장 프로 시저에서 반환 된 레코드 집합의 각 데이터 집합 내에서 DataTable을 반환한다

    DataSet dataset = new DataSet();
    using (var adapter = new SqlDataAdapter("yourStoredProcedure", yourConnectionString))
    {
        adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
        adapter.Fill(dataset);
    }
    for (int i = 0; i < dataset.Tables.Count; i++)
    {
        // Do something for each recordset
    }
    

    당신은 SqlDataReader 개체를 사용하는 경우, 사용은 다음 레코드에 사전에 SqlDataReader.NextResult () 메소드를 사용할 수 있습니다 :

    using (var connection = new SqlConnection(yourConnectionString))
    using (var command = new SqlCommand("yourStoredProcedure"))
    {
        connection.Open();
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                // do something with first result set;
            }
            if (reader.NextResult())
            {
                while (reader.Read())
                {
                    // do something with second result set;
                }
            }
            else
            {
                return;
            }
            if (reader.NextResult())
            {
                while (reader.Read())
                {
                    // do something with third result set;
                }
            }
            else
            {
                return;
            }
        }
    }
    
  3. ==============================

    3.이것은 당신이 필요로하는 모든 돌아갑니다

    이것은 당신이 필요로하는 모든 돌아갑니다

    using (SqlConnection conn = new System.Data.SqlClient.SqlConnection(connString))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "yoursp";
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;
    
            conn.Open();
    
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
    
            DataSet ds = new DataSet();
            adapter.Fill(ds);
    
            conn.Close();
        }
    }
    
  4. ==============================

    4.박사는 사용하여 더 이상 레코드 또는 전혀없는 경우 확인할 수있는 경우 (dr.NextResult ())

    박사는 사용하여 더 이상 레코드 또는 전혀없는 경우 확인할 수있는 경우 (dr.NextResult ())

    dr.read 다시 다음 루프

    이 시도

    string connStr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
    SqlConnection Con = new SqlConnection(connStr);
    
    try
    {
        string str1 = "select productid,productname from products;select VendorFName from vendor";
        SqlCommand com = new SqlCommand(str1, Con);
    
        com.Connection.Open();
    
        SqlDataReader dr = com.ExecuteReader();
    
        DropDownList1.Items.Add("Select Product Id");
        DropDownList2.Items.Add("Select Vendor Name");
    
        while(dr.Read())
        {
            DropDownList1.Items.Add(dr.GetValue(0).ToString());
        }
    
        if (dr.NextResult())
        {
            while (dr.Read())
            {
                DropDownList2.Items.Add(dr.GetValue(0).ToString());
            }
        }
    }
    catch (Exception ex)
    {
    }
    finally
    {
        if (Con.State == ConnectionState.Open)
        {
            Con.Close();
        }
    }
    
  5. from https://stackoverflow.com/questions/18510901/return-multiple-recordsets-from-stored-proc-in-c-sharp by cc-by-sa and MIT license