Avatar billede spottie Nybegynder
10. juli 2006 - 10:21 Der er 8 kommentarer og
1 løsning

Vedr. hjælp til parametre?

Goddag eksperter

Jeg har dette stykke kode i C#:
public void InsDelUpQuery(string sql, string date)
{
MySqlCommand sqlcommand = new MySqlCommand(sql);
MySqlConnection dbconn = new MySqlConnection(conn);
           
sqlcommand.Connection = dbconn;

dbconn.Open();

sqlcommand.Parameters.Add("?a_date", MySqlDbType.Datetime);

sqlcommand.Parameters["?a_date"].Value = date;

sqlcommand.ExecuteNonQuery();

sqlcommand.Connection.Close();
}

Det virker også fint nok, men det er i et test program i det rigtige program trækker jeg ikke nogen string ind i funktion kun selve sql strengen fordi den er blevet klargjort i en anden klasse i en funktion og denne så bare kaldes til at udføre det.

Kan man man bruge parametre på en måde hvis man trækker en færdig redigeret streng ind eller kan man så ikke bruge?

hvis ja, hvordan? gerne lidt kodehjælp.

Håber at høre fra nogen.

vh spottie
Avatar billede arne_v Ekspert
10. juli 2006 - 13:09 #1
du kan sende en string med @ placeholdere

eller du kan sende en udfyldt SqlCommand med alle parameterne
Avatar billede arne_v Ekspert
10. juli 2006 - 13:10 #2
hvis det er de sædavnelige mange felter hvor der kun skal WHERE på hvis de er
udfyldt, så kan man jo godt klistre "xxxx=@xxxx" på en SQL string dynamisk !
Avatar billede spottie Nybegynder
10. juli 2006 - 21:47 #3
arne_v... kan du give eksempel på hvordan man laver en string i en funktion hvor der er parametre i?

Vil hjælpe meget..

spottie
Avatar billede arne_v Ekspert
10. juli 2006 - 21:54 #4
ja

men det bliver foerst om en tre timer
Avatar billede spottie Nybegynder
10. juli 2006 - 22:10 #5
arne_v.... helt oki kunne være dejligt laver det bare i morgen..bare glad for hvis du gider give dig tid til at vise det.

spottie
Avatar billede arne_v Ekspert
11. juli 2006 - 02:06 #6
til inspiration:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using System.Data;
using System.Data.SqlClient;

namespace E
{
    public class MainForm : Form
    {
        private TextBox textBox1;
        private TextBox textBox2;
        private TextBox textBox3;
        private Button button1;
        public MainForm()
        {
            InitializeComponent();
        }
       
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
       
        private void InitializeComponent() {
            textBox1 = new TextBox();
            textBox2 = new TextBox();
            textBox3 = new TextBox();
            button1 = new Button();
            SuspendLayout();
            textBox1.Location = new Point(25, 25);
            textBox1.Size = new Size(100, 25);
            textBox2.Location = new Point(25, 75);
            textBox2.Size = new Size(100, 25);
            textBox3.Location = new Point(25, 125);
            textBox3.Size = new Size(100, 25);
            button1.Location = new Point(25, 175);
            button1.Size = new Size(100, 25);
            button1.Text = "Test";
            button1.Click += new System.EventHandler(Button1Click);
            Size = new Size(150, 275);
            Controls.Add(textBox1);
            Controls.Add(textBox2);
            Controls.Add(textBox3);
            Controls.Add(button1);
            Text = "Demo";
            ResumeLayout(false);
        }
       
        private SqlCommand BuildCommandInGui()
        {
            SqlCommand res = new SqlCommand();
            res.CommandText = "SELECT * FROM t1";
            int n = 0;
            if(textBox1.Text != "")
            {
                res.CommandText += (n > 0 ? " AND" : " WHERE");
                res.CommandText += " f1 = @f1";
                res.Parameters.Add("@f1", SqlDbType.VarChar, 50);
                res.Parameters["@f1"].Value = textBox1.Text;
                n++;
            }
            if(textBox2.Text != "")
            {
                res.CommandText += (n > 0 ? " AND" : " WHERE");
                res.CommandText += " f2 = @f2";
                res.Parameters.Add("@f2", SqlDbType.VarChar, 50);
                res.Parameters["@f2"].Value = textBox2.Text;
                n++;
            }
            if(textBox3.Text != "")
            {
                res.CommandText += (n > 0 ? " AND" : " WHERE");
                res.CommandText += " f3 = @f3";
                res.Parameters.Add("@f3", SqlDbType.VarChar, 50);
                res.Parameters["@f3"].Value = textBox3.Text;
                n++;
            }
            return res;
        }
       
        private string BuildStringInGui(Hashtable args)
        {
            string res = "SELECT * FROM t1";
            int n = 0;
            if(textBox1.Text != "")
            {
                res += (n > 0 ? " AND" : " WHERE");
                res += " f1 = @f1";
                args.Add("@f1", textBox1.Text);
                n++;
            }
            if(textBox2.Text != "")
            {
                res += (n > 0 ? " AND" : " WHERE");
                res += " f2 = @f2";
                args.Add("@f2", textBox2.Text);
                n++;
            }
            if(textBox3.Text != "")
            {
                res += (n > 0 ? " AND" : " WHERE");
                res += " f3 = @f3";
                args.Add("@f3", textBox3.Text);
                n++;
            }
            return res;
        }
       
        private SqlCommand ConvertStringToCommandInDal(string sql, Hashtable args)
        {
            SqlCommand res = new SqlCommand(sql);
            foreach(DictionaryEntry ent in args)
            {
                res.Parameters.Add((string)ent.Key, SqlDbType.VarChar, 50);
                res.Parameters[(string)ent.Key].Value = ent.Value;
            }
            return res;
        }

        private void Button1Click(object sender, System.EventArgs e)
        {
            SqlCommand v1 = BuildCommandInGui();
            string dbg1 = v1.CommandText + " / ";
            for(int i = 0; i < v1.Parameters.Count; i++)
            {
                dbg1 += (" " + v1.Parameters[i].ParameterName + "=" + v1.Parameters[i].Value);
            }
            MessageBox.Show(dbg1);
            Hashtable args = new Hashtable();
            string s2 = BuildStringInGui(args);
            SqlCommand v2 = ConvertStringToCommandInDal(s2, args);
            string dbg2 = v2.CommandText + " / ";
            for(int i = 0; i < v2.Parameters.Count; i++)
            {
                dbg2 += (" " + v2.Parameters[i].ParameterName + "=" + v2.Parameters[i].Value);
            }
            MessageBox.Show(dbg2);
        }
    }
}
Avatar billede arne_v Ekspert
11. juli 2006 - 02:06 #7
jeg tror ikke at den kode er specielt god

men den må give lidt ideer
Avatar billede spottie Nybegynder
12. juli 2006 - 22:58 #8
tak for det arne..vil kigge på det...
Avatar billede arne_v Ekspert
13. august 2006 - 22:51 #9
all set ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester