TabParam= new SqlParameter[50];de vrait faire l'affaire non ?
this.Tabstring.Clear()ne va pas ?? c'est quoi comme objet ?
private void ExecuteQuery( string query ) { // Remplace les caractères '?' par le caractère '@' query = query.Replace( '?', '@' ); // Affecte la requête à l'objet SqlCommand command.CommandText = query; // Récupère le nom des variables ArrayList variableNames = ExtractVariableNames( query ); // Affecte la liste de SqlParameters à l'objet SqlCommand command.Parameters.Clear(); command.Parameters.AddRange( ExtractSqlParameters( variableNames ) ); // Exécute la requête command.CommandText = query; SqlDataReader reader = command.ExecuteReader(); } // Extrait le nom des variables contenu dans la requête private ArrayList ExtractVariableNames( string test ) { // Initialise le tableau de noms de variables ArrayList variableNames = new ArrayList(); // Parcourt la requête à exécuter for( int charIndex = 0; charIndex < test.Length; charIndex++ ) { if( test[ charIndex ] == '@' ) { // Début de nom de variable int startIndex = charIndex + 1; // Recherche la fin du nom de variable charIndex++; while( charIndex < test.Length && test[ charIndex ] != ',' && test[ charIndex ] != ' ' && test[ charIndex ] != ')' ) charIndex++; // Ajoute le nom de la variable dans le tableau string variableName = test.Substring( startIndex, charIndex - startIndex ); if( !variableNames.Contains( variableName ) ) variableNames.Add( variableName ); } } // Retourne le tableau return variableNames; } // Extrait les valeurs des variables passées en paramètre et retourne une liste des SqlParamaters associés private SqlParameter[] ExtractSqlParameters( ArrayList variableNames ) { // Initialise le tableau de SqlParameters SqlParameter[] sqlParameters = new SqlParameter[ variableNames.Count ]; // Parcourt les noms de variables for( int varIndex = 0; varIndex < variableNames.Count; varIndex++ ) { // Extrait le SqlParameter associé sqlParameters[ varIndex ] = GetParameter( variableNames[ varIndex ].ToString() ); } // Retourne le tableau return sqlParameters; } // Retourne un SqlParameter affecté de la valeur d'une variable d'après son nom private SqlParameter GetParameter( string varName ) { FieldInfo field = typeof( Program ).GetField( varName, BindingFlags.NonPublic | BindingFlags.Static ); if( field == null ) throw new ArgumentException( "La variable '" + varName + "' n'est pas définie dans la classe Program" ); SqlDbType dbType; switch( field.FieldType.FullName ) { case ("System.String"): dbType = SqlDbType.VarChar; break; case ("System.Int32"): dbType = SqlDbType.Int; break; case ("System.Double"): dbType = SqlDbType.Float; break; case ("System.DateTime"): dbType = SqlDbType.DateTime; break; default: throw new ArgumentException( "Une variable de type '" + field.FieldType.FullName + "' ne peut pas être converti en SqlDbType" ); } SqlParameter parameter = new SqlParameter( varName, dbType ); parameter.Value = field.GetValue( null ); return parameter; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpublic string Cible = ""; public string CSecteur = ""; public byte EtatVal = 0; public Boolean Found = false; public string From = ""; public string GroupBy = ""; public string Into = ""; public string IntoDbf = ""; public uint NbErrTransac = 0; public int NbLigne = 0; public int NomConnection = 0; // a transformer en pointeur public string OrderBy = ""; public uint ResConnect = 0; public string Select = ""; public string SourceDbf = ""; public string Type = ""; public string Values = ""; public string Where = ""; public string XExec = ""; public string XInto = ""; public string XSet = ""; public string XVarVal=""; public string XValues =""; public string XVar=""; public string XVal=""; ArrayList Tabstring = new ArrayList(); string[] Tabmot; char[] tonTableaudeChar; SqlConnection connection ; SqlCommand command; SqlTransaction transaction; DataSet Dataset = new DataSet(); Boolean trouve = false; SqlParameter[] TabParam= new SqlParameter[50]; int nb_param = 0; int nb_string = 0;
public void Execution(string XExec) { try { for (int z = 0; XExec.Length > z; z++) { if (XExec[z] == '?') { tonTableaudeChar = XExec.ToCharArray(); tonTableaudeChar[z] = '@'; XExec = new String(tonTableaudeChar); } } Console.Write("\n\nCommande : " + XExec + " \n\n"); //-------------------------------TEST - solution 1 - TEST ---------------------------------- parser(XExec); // choppe toutes mes variables ? quelquechose dans un Tabstring sans le ? for (int i = 0; i < nb_string; i++) // créé les parametres { Console.Write("\n\nDebut du test d'existence du paramètre "+Tabstring[i]+" dans TableDefini"); trouve = existe(Tabstring[i].ToString()); if (!trouve) { Console.Write("\nParamètre " + Tabstring[i] + " non trouvé, début de la phase de construction du paramètre"); TabParam[i] = GetParameter(Tabstring[i].ToString()); // créé le param command.Parameters.Add(ChercheParam(Tabstring[i].ToString())); // ajoute le parametre a la commande TableDefini.Add(Tabstring[i].ToString()); Console.Write("\nCréation de : " + TabParam[i].ToString()); } else { command.Parameters.Add(ChercheParam(Tabstring[i].ToString())); // ajoute le parametre a la commande Console.Write("\nLe paramètre " + Tabstring[i] + " existe, valeur éditée!"); } } //------------------------------ FIN TEST - solution 1 - FIN TEST -------------------------- command.CommandText = XExec; Console.Write("\n\ncommandetext : " + command.CommandText); Console.Write("\n\nAffectation des parametres a la commande .... execution"); SqlDataReader reader = command.ExecuteReader(); this.Found =reader.HasRows; reader.Close(); if (this.Type == "SELECT") { Dataset = RecupDataSet(command); Console.Write("test => SELECT"); for (int i = 0; i <= Dataset.Tables[0].Rows.Count - 1; i++) { MessageBox.Show(Dataset.Tables[0].Rows[i].ItemArray[0] + " -- " + Dataset.Tables[0].Rows[i].ItemArray[1]); } } else if (this.Type == "COUNT") { Dataset = RecupDataSet(command); Console.Write("test => SELECT"); this.NbLigne = (int)Dataset.Tables[0].Rows[0][0]; } Console.Write("\n\nCommande executée, appuyez sur une touche pour continuer...\n"); Console.ReadKey(); } catch (Exception e) { this.NbErrTransac++; MessageBox.Show(e.ToString()); } }
public void parser(string BOOM) { string chaine; string chainetmp; string mot; int position,k,save=0; chaine = BOOM; mot = ""; position 0; k 0; Console.Write("\n\nDebut du parser ...."); for (int z = 0; chaine.Length > z; z++) { if (chaine[z] == '?') { tonTableaudeChar = chaine.ToCharArray(); tonTableaudeChar[z] = '@'; chaine = new String(tonTableaudeChar); } } for (int i = 0; chaine.Length > i; i++) { if (chaine[i] == '@') { position = i; chainetmp = chaine.Substring(position + 1); for (int j = 0; chainetmp.Length > j; j++) { if (chainetmp[j] != ',' && chainetmp[j] != ' ' && chainetmp[j] != ')') { mot = mot + chainetmp[j]; k++; } else { save = k; k = 0; break; } } Console.Write("\n\nVariable découverte : " + mot.Trim() + ", test d'existence dans Tabstring"); if (!(existestring(mot.Trim()))) { Console.Write("\nParser : "+ mot.Trim()+" stocké dans Tabstring"); Tabstring.Add(mot.Trim()); mot = ""; save = 0; this.nb_string++; } else { Console.Write("\nParser : mot existant dans Tabstring, non stocké"); mot = ""; save=0; } } } Console.Write("\n\nFin du parser ...."); }
private SqlParameter ChercheParam(string varName) { SqlParameter param = new SqlParameter(); FieldInfo field = typeof(Program).GetField(varName, BindingFlags.NonPublic | BindingFlags.Static); if (field == null) throw new ArgumentException("La variable '" + varName + "' n'est pas définie dans la classe Program"); Console.Write("\n\nDebut de la recuperation de @" + varName + " dans TabParam ..."); for (int i = 0; nb_param> i; i++) { Console.Write("\nrecherche de : @" + varName + " dans TabParam : " +TabParam[i]); if (TabParam[i].ParameterName == '@'+varName) { Console.Write("\nrecherche : parametre trouve : @" + varName+" .. récuperation..."); param = TabParam[i]; param.Value = field.GetValue(varName); } } return param; }
private Boolean existe(string varName) { Boolean hum=false; Console.Write("\n\nRecherche du parametre : @" + varName + " dans TableDefini ..."); for (int i = 0; TableDefini.Count > i; i++) if (varName == TableDefini[i].ToString()) { Console.Write("\nParametre " + varName + " déja existant : "+TableDefini[i].ToString() ); hum = true; break; } else { hum = false; Console.Write("\nParametre " + varName + " non trouvé : " + TableDefini[i].ToString() ); } Console.Write("\nFin recherche"); if (TableDefini.Count == 0) Console.Write(" : aucun element dans TableDefini !"); return hum; }
public Boolean existestring(string varName) { Boolean hum = false; Console.Write("\n\nRecherche de la chaine : " + varName + " dans la Tabstring"); for (int i = 0; Tabstring.Count > i; i++) if (varName == Tabstring[i].ToString()) { Console.Write("\nChaine" + varName + " déja existante : " + Tabstring[i].ToString() ); hum = true; break; } else { hum = false; Console.Write("\nChaine " + varName + " non trouvée : " + Tabstring[i].ToString() ); } Console.Write("\nFin recherche"); if (Tabstring.Count == 0) Console.Write(" : aucun element dans Tabstring !"); return hum; }
char[] tonTableaudeChar; for (int z = 0; XExec.Length > z; z++) { if (XExec[z] == '?') { tonTableaudeChar = XExec.ToCharArray(); tonTableaudeChar[z] = '@'; XExec = new String(tonTableaudeChar); } }
private void Form1_Load(object sender, EventArgs e) { LANGAGE2SQL L_LANGAGE2SQL = new LANGAGE2SQL(); L_LANGAGE2SQL.RAZ(); L_LANGAGE2SQL.Connect(); L_LANGAGE2SQL.CSecteur = ""; L_LANGAGE2SQL.EtatVal = 3; L_LANGAGE2SQL.Type = "SELECT"; L_LANGAGE2SQL.Select = "*"; L_LANGAGE2SQL.From = "[DBSoft].[dbo].[DateAff]"; L_LANGAGE2SQL.Where = "Etendue=?G_Etendue"; L_LANGAGE2SQL.OrderBy = ""; L_LANGAGE2SQL.GroupBy = ""; L_LANGAGE2SQL.IntoDbf = "T_POIN"; L_LANGAGE2SQL.Execute(); DataSet dataset1 = new DataSet(); dataset1 = (L_LANGAGE2SQL.RecupDataSet(L_LANGAGE2SQL.command)); dataGridView1.DataSource = dataset1; dataGridView1.DataMember = "Table"; dataGridView1.Columns["PKDateAff"].ReadOnly = true; for (int i = 0; i < dataGridView1.Columns.Count; i++) listBox.Items.Add(dataGridView1.Columns[i].Name); L_LANGAGE2SQL.DisConnect(); } private void btn_select_Click(object sender, EventArgs e) { Label_test.Text = "SELECTFAIT"; }