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
Annonceindlæg fra Pointsharp
du kan sende en string med @ placeholdere eller du kan sende en udfyldt SqlCommand med alle parameterne
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 !
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
ja men det bliver foerst om en tre timer
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
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); } } }
jeg tror ikke at den kode er specielt god men den må give lidt ideer
tak for det arne..vil kigge på det...
13. august 2006 - 22:51
#9
all set ?
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.