8

Jeśli w pliku web.config jest zdefiniowany ciąg połączenia, w jaki sposób utworzyć połączenie z bazą danych SQL z C# kod (przepraszam, nie pamiętam, aby określić), a następnie wywołać procedura składowana. Chciałbym ostatecznie wykorzystać te dane w pewien sposób jako moje źródło danych dla GridView.Wywołanie procedury składowanej za pomocą asp.net

Oto jak ciąg połączenia jest zdefiniowana w pliku web.config:

<connectionStrings> 
<add name="db.Name" connectionString="Data Source=db;Initial Catalog=dbCat;User ID=userId;Password=userPass;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Serwer db jest serwer Microsoft SQL.

Oto czego szukałem:

ConnectionStringSettings conSet = ConfigurationManager.ConnectionStrings["db.Name"]; 
SqlConnection con = new SqlConnection(conSet.ConnectionString); 

kod dostępu do danych jest dość trywialne. Byłem bardziej zainteresowany dostępem do niego ze zmiennej connectionString w pliku web.config.

+0

Jakiego rodzaju baza danych? – N0Alias

+1

Czy używasz vb.net lub C#? (Aby pomóc ci w składni). – JonH

Odpowiedz

6

Jeśli jest to plik zasobów tak jak :

private static readonly string connString = Resource1.connString;

Gdzie connString to nazwa klucza. Jeśli jest to web.config plik

Coś tak:

private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["strConn"]; gdzie Conn jest zdefiniowana w pliku konfiguracyjnym web.

<add key="strConn" value="User ID=test;Password=test;Initial Catalog=TestDB;Data Source=NameOfServer;"/> 

Następnie wywołać sproc:

//connString = the string of our database app found in the resource file 
       using (SqlConnection con = new SqlConnection(connString)) 
       { 
        using (SqlCommand cmd = new SqlCommand("EMPDLL_selClientByClientID", con)) 
        { 
         cmd.CommandType = CommandType.StoredProcedure; 
         cmd.Parameters.Add("@ClientID", SqlDbType.VarChar).Value = cID; 
         con.Open(); 

         using (SqlDataReader reader = cmd.ExecuteReader()) 
         { 
          if (reader.HasRows) 
          { 
           if (reader.Read()) 
           { 
             //more code 
           } 
          } 
         } 
        } 
        } 

to jeśli są kodowania w C#, VB.NET jest tak samo sprawa tylko trochę więcej wordier :), oto mała próbka:

Public Sub DeleteEmployee(ByVal lVID As Long) 
     Dim conMyData As SqlConnection 
     Dim cmdDelete As SqlCommand 

     Try 
      conMyData = New SqlConnection(connString) 
      cmdDelete = New SqlCommand("delEmployee", conMyData) 

      With cmdDelete 
       .CommandType = CommandType.StoredProcedure 
       'add the parameters 
       .Parameters.Add("@LoginID", SqlDbType.BigInt).Value = lVID 'the request 
       conMyData.Open() 'open a connection 
       .ExecuteNonQuery() 'execute it 
      End With 

     Catch ex As Exception 
      Throw ex 
     Finally 
      cmdDelete = Nothing 
      conMyData.Close() 
      conMyData = Nothing 
     End Try 
    End Sub 

Oczywiście należy użyć instrukcji using zamiast try/catch/finally, aby zapewnić czyszczenie używanych zasobów.

+0

Nie chcę dodawać klucza do mojego pliku web.config (w przeciwnym razie muszę edytować wiele plików web.config) lub wpisać go jako zmienną statyczną. Czy jest możliwy dostęp do ciągu połączenia, jeśli jest zdefiniowany w moim pliku web.config jak w moim poście. – onit

+0

@onit, który znajduje się w pliku konfiguracyjnym sieci. – JonH

+0

@onit - jeśli chcesz tylko tę konkretną sekcję, możesz wykonać '_SQLDBConnString = System.Configuration.ConfigurationManager.ConnectionStrings (1) .ConnectionString() 'i użyj właściwości ConnectionStrings zamiast sekcji' appsettings'. – JonH

3

Coś takiego ...

using (var con = new SqlConnection(_connectionString)) 
{ 
    using (var cmd = new SqlCommand(_storedProcedureName, con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@pMyParamater", myParamaterValue); 
     con.Open(); 

     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // do something with the row 
      } 
     } 
    } 
} 

To wszystko jest bardzo proste rzeczy, aby być uczciwym, powinieneś być w stanie znaleźć wszystko, czego potrzebujesz od ADO.NET documentation

+1

Ack, jeśli znasz typ, dlaczego 'var'? – JonH

+0

Rozumiem, że to nie jest skomplikowane rzeczy. Zastanawiałem się tylko, czy ktoś może wskazać mi właściwy kierunek, ponieważ dosłownie właśnie rozpocząłem programowanie .NET. – onit

+2

@onit Tak, zdaję sobie sprawę, że nie była to krytyka. Jeśli jesteś czymś nowym, dobrze jest zapoznać się z nawykiem czytania dokumentacji jako pierwszego punktu. Następnie zadaj bardziej szczegółowe pytanie na SO, jeśli nadal utkniesz. Dowiesz się więcej w ten sposób, a unikniesz niektórych złych rad, które czasami są podawane na tej stronie. – fearofawhackplanet

Powiązane problemy