2017-11-16 4 views
0

Ich möchte zwei Werte sagen sagen @name und @pwd zu einer Tabelle, dafür kann ich folgenden Code in ASPX-Seite verwenden.Ich möchte eine Liste von SqlParameter an eine Funktion übergeben, die gespeicherte Prozedur in C#

public void save1() 
{ 
    try 
    { 
     using (SqlConnection con=new SqlConnection(ConfigurationManager.ConnectionStrings["myCon"].ConnectionString)) 
     { 
      using(SqlCommand cmd = new SqlCommand("SP_TEST",con)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.Add("@name", txtUname.Text); 
       cmd.Parameters.Add("@pwd", txtPwd.Text); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { } 
} 

Aber ich will diese beiden Variablen als einzelne List<SqlParameter> Variable übergeben als

List<SqlParameter> param = new List<SqlParameter>(); 
param.Add(new SqlParameter("@name", uname)); 
param.Add(new SqlParameter("@pwd", pwd)); 

So die Erklärung der obigen Funktion wechselt von

public void save1() 

zu

public void save1(List<SqlParameter> param) 

Aber mein Problem ist, ich weiß nicht, wie man diese zwei Variablen aus diesem param extrahiert und dann zu der cmd Variable hinzufügt. Ich brauche deine Hilfe.

+0

Klingt wie ein Job für eine [ 'SqlParameterCollection'] (https://msdn.microsoft.com/en-us/library/ system.data.sqlclient.sqlparametercollection) –

+0

nach 'foreach' Loops suchen. –

+1

Es ist schwer zu glauben, dass Sie nicht einmal wissen, wie man eine Schleife macht. – Will

Antwort

-1

Sie können eine for-Schleife verwenden, um auf jeden einzelnen Parameter in der Liste zuzugreifen.

für (interessant i = 0, i < parameter.Count, i ++) {// var param1 = param [i]; }

0

Wenn Sie wissen, dass es nur zwei Parameter sein wird können Sie diese verwenden

cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(param[0]); 
cmd.Parameters.Add(param[1]); 
cmd.ExecuteNonQuery(); 
+0

Nicht für nur zwei Variablen @Mohamed, Schließlich habe ich es mit 'foreach (var p in param) gemacht { cmd.Parameters.Add (p); } ' –

+0

Ja, das wird auch gut funktionieren. Wenn ein Beitrag Ihre Frage beantwortet, markieren Sie sie bitte als Antwort. Wenn mehr als ein Beitrag hilft, bitte upvoted sie als dies hilft StackOverflow besser werden. –

1

Haben Sie Ihren Look Save-Funktion wie folgt:

public void Save1(List<SqlParameter> param) 
{ 
    try 
    { 
     using (SqlConnection con = new SqlConnection(ConfigurationManager 
      .ConnectionStrings["myCon"].ConnectionString)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SP_TEST", con)) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       foreach (var item in param) 
        cmd.Parameters.Add(item); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     /*...*/ 
    } 
} 

Dann haben param auf die Berufung zugänglich sein Routine wie auch die Funktion Save1 (..), wie folgt:

public/*private*/ List<SqlParameter> param = new List<SqlParameter>(); 

Schließlich Ihr Aufruf Routine rufen Save1 (..) wie folgt:

string uname = "..."; 
string pwd = "..."; 
param.Add(new SqlParameter("@name", uname)); 
param.Add(new SqlParameter("@pwd", pwd)); 
Save1(param); 
Verwandte Themen