Forum: PC Hard- und Software SQL Abfrage in C#


von Leon E. (adiagi)


Angehängte Dateien:

Lesenswert?

Hi,

hab folgendes Datagrid ( siehe Anlage )

Hab in der TextBox folgende Abfrage:

"select * from Data"

aber ich bekomme eine Excepion mi der Meldung:
Syntax Error: Missing operand after 'Data' operator.

Was mache ich falsch?

Gruß

Agit

von Peter II (Gast)


Lesenswert?

in screenschot ist noch ein * dahinter?

von Leon E. (adiagi)


Lesenswert?

hi,
ja sry der Text da ist nicht richtig.
Wie gesagt gebe das hier ein.

"select * from Data"

aber es kommt imemr die oben genannte Fehlermeldung

von Peter II (Gast)


Lesenswert?

dann müsste man erstmal wissen was du mit der eingabezeile machst.

Denn diese meldung kommt micht vom SQL-Sever (du bist doch der jenige 
mit dem SQL-Server?)

von Leon E. (adiagi)


Lesenswert?

hi Peter,

hab mir en kleines DatGrid mit nem Table gebaut.

der Code sieht wie folgt aus
1
        DataView dv;
2
        public DataGridFilterForm()
3
        {
4
            InitializeComponent();
5
6
            dv = new DataView(dataTable1);
7
8
            dataGridView1.DataMember = "";
9
            dataGridView1.DataSource = dv;
10
11
            dataTable1.Rows.Add("00:00:00", "Mitternacht");
12
            dataTable1.Rows.Add("06:00:00", "Frühstück");
13
            dataTable1.Rows.Add("12:00:00", "Mittag");
14
            
15
        }
16
17
        private void textBox1_Leave(object sender, EventArgs e)
18
        {
19
            dv.RowFilter = textBox1.Text;
20
        }
In der TextBox gebe ich dann meine SQL Abfrage ein

Gruß

Agit

von MaWin (Gast)


Lesenswert?

> select * from Data

Data ist doch eine Spalte und keine Tabelle, die heisst scheinbar D.

Nenne sie halt "Tabelle".

von __tom (Gast)


Lesenswert?

Agit A. schrieb:
> In der TextBox gebe ich dann meine SQL Abfrage ein

der RowFilter kann kein SQL.

http://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter.aspx

von Leon E. (adiagi)


Lesenswert?

hi,

MaWin schrieb:
> Data ist doch eine Spalte und keine Tabelle, die heisst scheinbar D.

Ja hast recht.
Meien tabelle heißt Table1 und die Spalten heißen Time, DeviceName und 
Data.

Dann müsste doch folgende Anweisung richtig sein.

"Select * From Table1 Where DeviceName Like COM%"
aber da kommt wieder der Fehler, dass nach Table1 ein Operator vermisst 
wird.

Gruß

Agit

von Peter II (Gast)


Lesenswert?

Agit A. schrieb:
> aber da kommt wieder der Fehler, dass nach Table1 ein Operator vermisst
> wird.

hast du die Antwort von __tom (Gast) nicht gelesen?

von Stefan P. (form)


Lesenswert?

Fehlt vielleicht das abschließende Semikolon?

von Leon E. (adiagi)


Lesenswert?

hi,

Kommen vor dem Select ein " oder ein ' ?
also "Select oder 'Select

Gruß
Agit

von Simon K. (simon) Benutzerseite


Lesenswert?

__tom schrieb:
> Agit A. schrieb:> In der TextBox gebe ich dann meine SQL Abfrage einder 
RowFilter kann kein SQL.http://msdn.microsoft.com/en-us/library/system.dat...

__tom schrieb:
> Agit A. schrieb:> In der TextBox gebe ich dann meine SQL Abfrage einder 
RowFilter kann kein SQL.http://msdn.microsoft.com/en-us/library/system.dat...

__tom schrieb:
> Agit A. schrieb:> In der TextBox gebe ich dann meine SQL Abfrage einder 
RowFilter kann kein SQL.http://msdn.microsoft.com/en-us/library/system.dat...

__tom schrieb:
> Agit A. schrieb:> In der TextBox gebe ich dann meine SQL Abfrage einder 
RowFilter kann kein SQL.http://msdn.microsoft.com/en-us/library/system.dat...

von HiHi (Gast)


Lesenswert?

Simon K. schrieb:
> __tom schrieb:
> ...

Das ist doch keine Lösung ;-).

von Andreas (Gast)


Lesenswert?

Hi,

ich denke Deine Abfrage müßte in etwa so aussehen:


1
private void textBox1_Leave(object sender, EventArgs e)
2
{
3
  connect = new SqlConnection("Data Source=" + DBSERVER + ";
4
                Initial Catalog=DATENBANKNAME;
5
                Integrated Security=sspi;
6
                Connection Timeout=100");
7
8
  connect.Open();
9
  SqlCommand sqlCommand = new SqlCommand("", connect);
10
11
  sqlCommand.CommandText = textBox1.Text; // Deine Eingabe -> SELECT * FROM Tabele1
12
13
  SqlDataReader result = sqlCommand.ExecuteReader();
14
  while (result.Read())
15
  {
16
    dataGridView.Rows.Add(result[0],   // Spalte Time
17
                          result[1],   // Spalte DeviceName
18
                          result[2]);  // Spalte Data
19
  }
20
  result.Close();
21
  connect.Close();
22
}

Gruß

von Andreas (Gast)


Lesenswert?

Der ConnectionString geht natürlich auch so:

1
  connect = new SqlConnection("Data Source=DBSERVER;
2
                Initial Catalog=DATENBANKNAME;
3
                Integrated Security=sspi;
4
                Connection Timeout=100");

Gruß

von Simon K. (simon) Benutzerseite


Lesenswert?

Andreas schrieb:
> Der ConnectionString geht natürlich auch so:
> ...

Schau dir mal SqlConnectionStringBuilder an. Das geht viel einfacher.
http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqlconnectionstringbuilder(v=vs.80).aspx

Und wenn du schon ein DataGridView benutzt würde ich auf ADO.NET 
zurückgreifen. DataTable und Co.

von Leon E. (adiagi)


Lesenswert?

hi,

Simon K. schrieb:
> Und wenn du schon ein DataGridView,

Ja tue ich.

Ich hab einfach Probleme mit der SQL abfragemehr nicht denke ich.
Gruß

Agit

von Leon E. (adiagi)


Lesenswert?

Hi,

hab hier mal die gesamte Klasse:
1
namespace ManualGUI
2
{
3
    public partial class DataGridFilterForm : Form
4
    {
5
        class MyObject
6
        {
7
            public DateTime dt;
8
            public object Tag;
9
            public override string ToString()
10
            {
11
                return dt.ToString();
12
            }
13
            //public SMSC.NISTB.Configuration.Connector Connector;
14
            //public byte[] Data;
15
        }
16
17
        DataView dv;
18
        public DataGridFilterForm()
19
        {
20
            InitializeComponent();
21
22
            dv = new DataView(dataTable1);
23
            
24
            dataGridView1.DataMember = "";
25
            dataGridView1.DataSource = dv;
26
27
            dataTable1.Rows.Add("00:00:00", "Mitternacht");
28
            dataTable1.Rows.Add("06:00:00", "Frühstück");
29
            dataTable1.Rows.Add("12:00:00", "Mittag");
30
            MyObject mt = new MyObject();
31
            mt.dt = DateTime.Now;
32
            mt.Tag = this;
33
            dataTable1.Rows.Add(mt, mt); // Wenn diese zeiel auskommentiert ist funktioniert der Filter.
34
            //timer1.Enabled = true;
35
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
36
        }
37
38
        private void textBox1_Leave(object sender, EventArgs e)
39
        {
40
            try
41
            {
42
                dv.RowFilter = textBox1.Text;
43
                //dv.RowFilter = Data LIKE 'M*'
44
            }
45
            catch (Exception ex)
46
            {
47
                MessageBox.Show(ex.Message);
48
            }
49
        }
50
51
        private void timer1_Tick(object sender, EventArgs e)
52
        {
53
            dataTable1.Rows.Add(DateTime.Now.ToString(), DateTime.Now.Ticks.ToString());
54
            if (timer1.Interval > 50)
55
            {
56
                timer1.Interval /= 2;
57
            }
58
            dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 2].Cells[0];
59
        }
60
61
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
62
        {
63
            
64
            object o = dataGridView1[e.ColumnIndex, e.RowIndex].Value;
65
            if (o is MyObject)
66
            {
67
                MyObject mt = (MyObject)o;
68
                MessageBox.Show(mt.Tag.GetType().Name);
69
                //mt.Connector.Send(mt.Data);
70
            }
71
        }
72
73
74
    }
75
}

Meine Anweisungen (z.B. Data LIKE 'M*') klappen nun mit der Textbox, 
aber nur wenn ich dataTable1.Rows.Add(mt, mt); (siehe Code) nicht mache.
Wenn diese Zeile dabei ist kommte olgende Fehlermeldeung
"Cannot perform 'Like' operation on ManualGUI.MyObject and 
System.String"

Was bedeutet das und wieso geht es wenn ich MyObject nicht in die Zeile 
einfüge.

Vielen Dank

Gruß
Agit

von Leon E. (adiagi)


Lesenswert?

Hi Leute,

Hab das Problem gefunden.
Die Typen stimmen nicht überein.
mt ist vom Typ object und die tabelle erwartet einen String.

dataTable1.Rows.Add(mt, mt) -> dataTable1.Rows.Add(mt.ToString(), 
mtToString())

So gehts.

Danke für die Tipps.
Gruß Agit

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.