Tagi na forum.

C# 1456 XML 282
SQL 1192 sieci 268
ASP.NET 785 IIS 262
Windows 726 C++ 255
web 608 Html 218
Visual Studio 515 Information Technology 193
SQL Server 425 MSDN 167

pokaż wszystkie tagi na forum

Jak wypełnić DataSet przy pomocy ExecuteNonQuery

madderdin 2012-02-06 22:41:45
0
avatar
 
 

Witajcie,

Zacząłem pisać klasę AAA.

Z DataTable Naglowek zamierzam zasilac ObjectDataSource który z kolei bedzie zasilać GridView.

Chodzi o to, aby zwrocić DataSet z wynikami wykonanej procedury skladowanej "prNaglowekDoumentu".

Muszę wypełnić dataset wynikami wykonanej procedury. Nie wiem, jak powiązać ExecuteNonQuery z DataSetem.

Będę wdzięczny za każdą sugestię,.

pozdrawiam

Wojtek

 

Public class AAA

{

      public DataTable Naglowek(int   IdTotalNagZapotrz,  short     IdStatus)

            {
            string connStr = Polaczenia.Connect(); // wywolanie z klasy Polaczenia
            SqlConnection conn = new SqlConnection(connStr);
           
                      
            using (SqlCommand command = new SqlCommand("prNaglowekDoumentu", conn))
            {
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.Add("@IdTotalNagZapotrz", SqlDbType.Int);
                command.Parameters.Add("@IdStatus", SqlDbType.SmallInt);
                
                command.Parameters["@IdTotalNagZapotrz"].Value = IdTotalNagZapotrz;
                command.Parameters["@IdStatus"].Value = IdStatus;
                
 
                DataSet ds = new DataSet();
   Tutaj się wywala-->   ds = command.ExecuteNonQuery(); 
                try
                {
                   conn.Open();
    da.Fill(ds, startRecord, maxRecords, "NagZapotrz");
                }
                catch (SqlException e)
                {
                    // Coś tam
                }
                finally
                {
                    conn.Close();
                }
                return ds.Tables["NagZapotrz"];
}
}

tagi: ASP.NET


m.iwanowski  2012-02-07 00:37:22 #1
0
avatar
 
 

Musisz szkorzystać z ExecuteQuery które zwraca DataReadera i za pomocą tego readera wypełnić DataSeta.


Pozdrawiam

Marcin Iwanowski

 

...::: Jeżeli mój post jest rozwiązaniem Twojego problemu, kliknij "Rozwiązanie" :::...

gordon_shumway  2012-02-07 08:36:53 #2
0
avatar
 
 

Ja nigdzie nie widzę zadeklarowania zmiennej da... Zamiast używać DataReadera lepiej użyć DataAdapter, który najwidoczniej chciałeś użyć, ale nie do końca zrobiłeś to dobrze.

Całość powinna wyglądać mniej więcej tak:

using(SqlConnection conn = new SqlConnection(connStr))
{
  using(SqlCommand command = new SqlCommand("NazwaProcedury"))
  {
    //ustawienie parametrów j.w.

    conn.Open();

    DataSet ds = new DataSet();
    SqlDataAdapter da = new SqlDataAdapter(command);
    
    da.Fill(ds);
  }
}

return ds.Tables["NagZapotrz"];

 

SqlConnection powinien być w usingu, podobnie jak SqlCommand.

Przy dodawaniu parametrów możesz użyć metody AddWithValue; zazwyczaj nie trzeba podawać typu - SQL Server potrafi sobie sam poradzić z rozpoznaniem jaki typ użyć.


Edytowano 1 raz. Ostatnio 2012-02-07 08:37:20 przez gordon_shumway.
m.iwanowski  2012-02-07 09:14:31 #3
0
avatar
 
 

Można użyć i DataReader'a, DataSet ma metodę Load która przyjmuje DataReader'a.


Pozdrawiam

Marcin Iwanowski

 

...::: Jeżeli mój post jest rozwiązaniem Twojego problemu, kliknij "Rozwiązanie" :::...

gordon_shumway  2012-02-07 11:04:18 #3.1
0
avatar
 
 

Zgadza się, DataSet można uzupełnić na oba sposoby. Oczywiście w moim przykładzie SqlDataAdapter należałoby również "ubrać" w using, podobnie jakby to miało miejsce w przypadku użycia SqlDataReadera.


madderdin  2012-02-08 17:12:08 #4
0
avatar
 
 

Panowie, bardzo Wam dziękuję za skuteczną pomoc.

pozdrawiam serdecznie

Wojtek


Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony