Laden...
C
Capi myCSharp.de - Member
Freizeitentwickler... Bräunlingen, Schwarzwald Dabei seit 06.02.2004 202 Beiträge
Benutzerbeschreibung

Forenbeiträge von Capi Ingesamt 202 Beiträge

15.02.2012 - 15:11 Uhr

Hallo zusammen,

ich habe schon sehr viele Artikel über das Drucken gelesen aber leider komme ich nicht weiter.

Ich habe in einem Datagrid mehrere Einträge und möchte jede Zeile aus dem Datagrid auf eine neue Seite drucken.

Leider druckt mir der Drucker alle Seiten auf eine Seite übereinander. Ich komme einfach nicht drauf warum es nicht auf verschiedene Seiten verteilt wird.

Es sieht so aus als ob der Drucker nicht mitbekommt, dass er eine neue Seite erstellen soll.

Wäre toll wenn mir jemand einen Tip hat, wo mein Fehler liegt.

Vielen Dank.


 private void printDocumentRMA_PrintPage(object sender, PrintPageEventArgs e)
        {
//Für jedes Gerät
            for (int i = 0; i < dataGridViewRMADevices.Rows.Count - 1; i++)
            {
                
                

                int iTabText = 55;
                int iLeftSide = 13;
                float fCountLine = 110;
                e.Graphics.PageUnit = GraphicsUnit.Millimeter;
                RectangleF rectFPapier = e.MarginBounds;
                
                Pen oPen = new Pen(Brushes.Black,0.3F);
                
                FontFamily myFontFamily = new FontFamily("Arial");
                Font oFont = new Font(myFontFamily, 3, FontStyle.Bold, GraphicsUnit.Pixel);
                Font myFontBold = new Font(myFontFamily, 8, FontStyle.Bold, GraphicsUnit.Pixel);
                Font oFontNormal = new Font(myFontFamily, 4, FontStyle.Regular, GraphicsUnit.Pixel);
                Font oFontUnderline = new Font(myFontFamily, 2, FontStyle.Underline, GraphicsUnit.Pixel);



                
                //Info Reparaturbegleitschreiben
                e.Graphics.DrawString("Reparaturbegleitschreiben", myFontBold, Brushes.Black, 50, 115);
                fCountLine = 130;
                //Daten Reparatur (Datum, Email, Telefon, Fax)
                e.Graphics.DrawRectangle(oPen, 10, fCountLine-2, 180, 27);
                e.Graphics.DrawString("Datum:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(dateTimePickerRMA.Value.ToShortDateString(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("Ansprechpartner:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMAAnsprechpartner.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("E-Mail:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMAEMail.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("Telefon: ", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMATelefon.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                e.Graphics.DrawString("Fax:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMAFax.Text.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=10;

                //Daten Gerät
                float fLineStart = fCountLine;
                e.Graphics.DrawString("Seriennummer:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells ["Seriennummer"].Value.ToString().Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                fCountLine+=5;
                
                //Fehlerbeschreibung
                string sTempSonstiges = "";
                
                if (dataGridViewRMADevices.Rows[i].Cells["Error_KD"].Value.ToString().Length <= 50)
                {
                    e.Graphics.DrawString("Fehlerbeschreibung: ", oFont, Brushes.Black, iLeftSide, fCountLine);
                    e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells ["Error_KD"].Value.ToString(), oFont, Brushes.Black, iTabText, fCountLine);
                    fCountLine += 5;
                }
                else
                {
                    sTempSonstiges = dataGridViewRMADevices.Rows[i].Cells["Error_KD"].Value.ToString();
                    //ist größer als 50 dann unterteilen
                    if (sTempSonstiges.Length > 0)
                    {
                        string sTemp = "";
                        e.Graphics.DrawString("Fehlerbeschreibung: ", oFont, Brushes.Black, iLeftSide, fCountLine);
                        int iCount = 0;
                        //mehr als 50 
                        while (true)
                        {
                            //dann die ersten 50 Zeichen drucken
                            sTemp = CutLongString(sTempSonstiges, 50);
                            e.Graphics.DrawString(sTemp.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                            //existieren umbrüche ja dann erhöhen den Druckbereich
                            iCount = CountChar(Environment.NewLine, sTemp);
                            if (iCount > 0)
                            {
                                //mehrer Einträge gefunden
                                for (int j = 0; j <= iCount; j++)
                                {
                                    fCountLine = fCountLine + 5;
                                }
                            }
                            //danach den bereits gedruckten Teil löschen
                            sTempSonstiges = sTempSonstiges.Remove(0, sTemp.Length);
                            if (sTempSonstiges.Length <= 50)
                            {
                                fCountLine = fCountLine + 5;
                                //drucken
                                e.Graphics.DrawString(sTempSonstiges.Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                                fCountLine = fCountLine + 5;
                                // und Schleife beenden
                                break;
                            }
                            fCountLine = fCountLine + 5;
                        }

                    }
                }
                //Rectangle für Seriennummer... Variable größe
                

                //Zubehör                
                e.Graphics.DrawString("Zubehör:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells ["Zubehoer"].Value.ToString().Trim(), oFont, Brushes.Black, iTabText, fCountLine);
                float fErgebnis = fCountLine - fLineStart;

                e.Graphics.DrawRectangle(oPen, 10, fLineStart-2, 180, fErgebnis+7);

                //Hinweis Kostenvoranschlag
                fCountLine += 10;
                e.Graphics.DrawRectangle(oPen, 10, fCountLine-2, 180, 17);
                e.Graphics.DrawString("Hinweis:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString("Gewährleistungsfall, andernfalls wird ein Kostenvoranschlag benötigt! Kostenvoranschlag", oFont, Brushes.Black, iTabText, fCountLine);
                e.Graphics.DrawString("für alle Einzelkomponenten und Überprüfungen zusammengefasst unter der Seriennummer", oFont, Brushes.Black, iTabText, fCountLine += 5);
                e.Graphics.DrawString("des Gerätes.", oFont, Brushes.Black, iTabText, fCountLine += 5);

                //TEST
                fCountLine += 10;
                e.Graphics.DrawRectangle(oPen, 10, fCountLine-2, 180, 8);
                e.Graphics.DrawString("TEST-RMA:", oFont, Brushes.Black, iLeftSide, fCountLine);
                e.Graphics.DrawString(textBoxRMANumberWAROK.Text, oFont, Brushes.Black, iTabText, fCountLine);

                fCountLine += 10;
                
                //RMA Hersteller
                if (dataGridViewRMADevices.Rows[i].Cells["RMAHersteller"].Value.ToString().Length > 0)
                {
                    e.Graphics.DrawRectangle(oPen, 10, fCountLine - 2, 180, 8);
                    e.Graphics.DrawString(oDataHersteller.Rows[0]["Unternehmen"].ToString() + " - RMA:", oFont, Brushes.Black, iLeftSide, fCountLine);
                    e.Graphics.DrawString (dataGridViewRMADevices.Rows[i].Cells["RMAHersteller"].Value.ToString(), oFont, Brushes.Black, iTabText, fCountLine);
                    fCountLine += 10;
                }
                

                //Erklärung
                e.Graphics.DrawRectangle(oPen, 10,fCountLine+3, 180, 15);
                e.Graphics.DrawString("Bitte senden Sie das defekte Gerät an die oben genannte Empfänger-Adresse.", oFont, Brushes.Black, iLeftSide, fCountLine += 5);
                e.Graphics.DrawString("Legen Sie das Reparaturbegleitschreiben zu den Versandunterlagen.", oFont, Brushes.Black, iLeftSide, fCountLine += 5);

                if (i == (dataGridViewRMADevices.Rows.Count - 2))
                {
                    //Ende der Liste erreicht.
                    e.HasMorePages = false;
                }
                else
                {
                    //Seite zu Ende-Seite drucken
                    e.HasMorePages = true;                    
                }

            }
}

16.08.2010 - 16:08 Uhr

Hallo zusammen,

ich habe 2 bytes mit jeweils einem Hexwert:
mybyte[0] = 0xB3;
mybyte[1] = 0x20;

Nun möchte ich, dass Array in die Zahl umwandeln Wenn ich diese Werte in den Taschenrechner eingebe, erhalte ich die Zahl 45856.

Aber wie bekomme ich es in C# hin? Wenn es nur ein byte wäre dann könnte man ja einfach ein int davor schreiben aber bei zwei bytes?

Habe versucht das ganze so zu bewerkstelligen:
int iNumber = (int)0xB3 + 0x20;

Aber dann bekomme ich nur eine falsche Zahl.

Weiss jemand wie man das bewerkstelligen kann?
Hab da leider keine Ahnung wie ich das wandeln kann.

Bin für jede Hilfe dankbar.

02.04.2008 - 11:50 Uhr

Hallo habe das ganze Forum und auch schon google durchsucht doch leider ohne Erfolg.

Ich habe eine Software erstellt (C#, VS2005, CF 2.0) die eine serielle Schnittstelle öffnet und die Daten in einer Textbox ausgibt.
Ich habe nun an den seriellen Port eine GPS-Mouse gehängt, die durchgehend Daten auf den Port schickt.

Mein Problem ist nun, dass wenn ich die Schnittstelle wieder schließen möchte dies nicht geschieht und sich das Programm aufhängt.

Im Anhang findet ihr mein komplettes Projekt. Ich habe bereits versucht mit BeginInvoke zu arbeiten aber leider ohne Erfolg.

Beim Schließen meines Ports erhalte ich nach gewisser Zeit nachdem ich den Close Befehl geschickt auch einen StackOverflow. Dies erhalte ich dann in DoUpdateRS232Port1().


private void Form1_Load(object sender, EventArgs e)
        {
            serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
            serialPort1.DtrEnable = true;
            //comboBoxComPort.SelectedIndex = 1;
            //comboBoxParity.SelectedIndex = 2;
            //comboBox1.SelectedIndex = 3;
            UpdateHandler = new EventHandler(DoUpdateRS232Port1);

            textBoxSend.Text = "F";
        }


 void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            try
            {
                ReadLineBuffer = serialPort1.ReadLine();
                this.BeginInvoke(UpdateHandler);
            }
            catch
            { }
        }

public void DoUpdateRS232Port1(object s, EventArgs e)
        {
            

                //bEnd = true;
                //int x = serialPort1.ReadByte();
                //byte[] myByte = new byte[serialPort1.BytesToRead];
                //serialPort1.Read(myByte, 0, serialPort1.BytesToRead);
                //string stest = serialPort1.ReadExisting();
            //textBoxInfo.Text = textBoxInfo.Text + stest;// Encoding.Default.GetString(myByte, 0, myByte.Length);
            //textBoxInfo.SelectionStart = textBoxInfo.Text.Length;
            //textBoxInfo.ScrollToCaret();
            //Application.DoEvents();
            textBoxInfo.Text += ReadLineBuffer;// Encoding.Default.GetString(myByte, 0, myByte.Length);
            ReadLineBuffer = "";
            textBoxInfo.SelectionStart = textBoxInfo.Text.Length;
            textBoxInfo.ScrollToCaret();
            Application.DoEvents();
           
        }


private void Form1_Closing(object sender, CancelEventArgs e)
        {
            if (serialPort1.IsOpen == true)
            {
                try
                {
                    serialPort1.DataReceived -= new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
                    //Thread.Sleep(1000);
                    string bla = serialPort1.ReadExisting();
                    serialPort1.Close(); //Error

                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
                
            }
        }
11.10.2007 - 15:32 Uhr

Hi,

weiss jetzt leider grad nicht was du mit DropDownlist meinst - hab die nicht gefunden oder meinst du Listbox? Ich würd aber mal probieren den Wert Text zu belegen, vielleicht hilft dies ja schon.

gruss andi

19.09.2007 - 09:17 Uhr

Hallo,

bin gerade dabei eine Setupdatei für ein mobiles Gerät zu erstellen. Ich registriere Treiber von FTDI um auf dem mobilen Gerät aus einem USB mehrere RS232 Schnittstellen zu generieren. Nun hab ich aber das Problem, das ich ja bei der Registrierung die COM Schnittstellen nicht kenne, die automatisch vom mobilen Gerät vergeben werden. Die bräuchte ich aber, da an RS232 Ports Modem angeschlossen werden und ich diese ebenfalls für die Auswahl auf dem mobilen Gerät sichtbar machen möchte:

Hier mal die Registryeinträge die ich mache:

[RegKeys]
"HKLM","ExtModems\FzghWAPort1","DeviceType","0x00010001","1"
"HKLM","ExtModems\FzghWAPort1","FriendlyName","0x00000000","Port Replikator C"
"HKLM","ExtModems\FzghWAPort1","Port","0x00000000","COM5:"
"HKLM","ExtModems\FzghWAPort3","FriendlyName","0x00000000","Port Replikator A"
"HKLM","ExtModems\FzghWAPort3","Port","0x00000000","COM7:"
"HKLM","ExtModems\FzghWAPort3","DeviceType","0x00010001","1"
"HKLM","ExtModems\FzghWAPort2","Port","0x00000000","COM6:"
"HKLM","ExtModems\FzghWAPort2","FriendlyName","0x00000000","Port Replikator B"
"HKLM","ExtModems\FzghWAPort2","DeviceType","0x00010001","1"

"HKLM","Drivers\USB\FTDI_DEVICE","Dll","0x00000000","ftdi_ser.dll"
"HKLM","Drivers\USB\LoadClients\1027_24577\Default\Default\FTDI_DEVICE","Dll","0x00000000","ftdi_ser.dll"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","LatencyTimer","0x00010001","16"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Index","0x00010001","7"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Prefix","0x00000000","COM"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Dll","0x00000000","ftdi_ser.dll"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","DeviceArrayIndex","0x00010001","5"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","InitialIndex","0x00010001","5"
"HKLM","Drivers\USB\FTDI_DEVICE_6001","Version","0x00000000","1.0.2.9"
"HKLM","Drivers\USB\ClientDrivers\FTDI_DEVICE","Dll","0x00000000","ftdi_ser.dll"

Wie ihr seht ist mein Problem bei den ExtModems wie kann ich dies nun bewerkstelligen, dass er zur Laufzeit d.h. wenn das mobile Geräte die Ports erhält entsprechend die Modemports vergibt?

Danke für die Hilfe
Gruss Andi

30.08.2007 - 11:09 Uhr

Hi,

der Link nutzt leider nicht, da hier auch wieder auf das richtige SDK bezug genommen wird.

Aber trotzdem Danke 🙂

Weiss jemand eine Implementierung der Methode GetProcessTimes(...) für das Compact Framework?`

29.08.2007 - 09:24 Uhr

Hallo bin jetzt schon länger auf der Suche nach einer Lösung doch leider habe ich bis jetzt nichts gefunden. Und zwar bin ich auf der Suche nach einer Lösung die CPU Auslastung zu erhalten und zwar im Compact Framework 2.0. Ich will einen Taskmanager ähnlich wie bei Windows XP wo alle Prozesse mit zugehöriger Speicherbelegung und CPU Zeit angezeigt werden.

Habe im Inet GetThreadTimes gefunden doch leider bekomme ich die Umsetzung nicht hin.

Hoffe jemand weiss rat oder kann mir einen Link geben wo dies jemand schon umgesetzt hat.

mfg Andi

12.10.2006 - 16:40 Uhr

Hallo ich hab es jetzt ein bisschen was gefunden was eigentlich funktionieren sollte aber leider wird das TrayIcon nicht angezeigt weiss jemand warum?


// Extract icon from the application's exe
			// This requires that app icon were set in the project properties
			string szPath = Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName;
			ExtractIconEx(szPath, 0, 0, ref hIcon, 1);

			// Fill NOTIFYICONDATA with data
			NOTIFYICONDATA nid = new NOTIFYICONDATA();

			// In our struct definition we have omitted emebedded wchar array size 64 - we need to account for it
			int cbSize = Marshal.SizeOf(nid) + 64 * Marshal.SystemDefaultCharSize;

			// Allocate memory
			IntPtr pData = LocalAlloc(LPTR, cbSize);
			
			// Set fields of the NOTIFYICONDATA (see SDK documentation)
			nid.cbSize = cbSize;
			nid.hIcon = hIcon;
			nid.hWnd = LocalAlloc(LPTR,Marshal.SizeOf(this));
			nid.uCallbackMessage = 0;
			nid.uID = 1;
			nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
			Marshal.StructureToPtr(nid, pData, false);

			// Add tooltip
			char[] arrTooltip = "My tooltip".ToCharArray();
			Marshal.Copy(arrTooltip, 0, (IntPtr)(pData.ToInt32() + Marshal.SizeOf(nid)), arrTooltip.Length);
			
			// Register with shell
			bool ret = Shell_NotifyIcon(NIM_ADD, pData);

			//Free memory
			LocalFree(pData);



Thx
andi

12.10.2006 - 14:40 Uhr

Hallo Leute,

versuche gerade verzweifelt bei einem Compact Framework 1.1 Projekt ein NotifyIcon in der Taskbar zu erzeugen. Habe hierzu die API Methode Shell_NotifyIcon() gefunden aber leider komme ich damit nicht zurecht.

Mein bisheriger Code:


[DllImport("coredll.dll")]
internal static extern int Shell_NotifyIcon(int dwMessage, ref NOTIFYICONDATA pnid);

struct NOTIFYICONDATA
{
	int cbSize;
	IntPtr hWnd;
	int uID;
	int uFlags;
	int uCallbackMessage;
	IntPtr hIcon;
	char mychar;
}

Tja und hier fängt nun mein Problem an, wie kann ich denn dies nun in C# realisieren? Kennt jemand eine Seite wo man ein Beispiel findet, habe leider nichts gefunden 🙁

Vielen Dank für die Hilfe
Andi

10.10.2006 - 17:01 Uhr

Nach langem Suchen habe ich jetzt herausgefunden, dass ich das ganze mit WindowsMessage realisieren muss. Doch leider bekomme ich es nicht hin, diese Nachricht zusammenzubasteln, dass man einen string mit übermitteln kann.


string  myTest = "Mein Text";
			Message msg = Message.Create((IntPtr)HWND_BROADCAST,1,new IntPtr(*myTest),(IntPtr)1);
			MessageWindow.PostMessage(ref msg);


Was muss ich denn nun umstellen damit dies funktioniert?

Mfg
Andi

10.10.2006 - 14:07 Uhr

Tag zusammen,

ich möchte in einem **Compact Framework **1.1 Projekt einen string an ein Fenster schicken. Hierbei wird ein RFID Tag ausgelesen von meinem Programm das im Hintergrund läuft. Daraufhin wird dann die ausgelesene Tag ID an das aktuell aktive Fenster geschickt z.B. in eine Textbox.

Wie bekomme ich das hin?

THX
Andi

24.03.2006 - 08:08 Uhr

Hallo Svenson,

du hattest recht es liegt am UpdateCommand. Jetzt ist aber mein Problem, dass ich mehrer rowguid Spalten habe, die upgedatet werden müssen. Hatte den Aufbau nur zu vereinfachen reingeschrieben. der richtige aufbau:

rowguid(Primary), Freitext, Datum, rowguidBenutzer, rowguidMaterial, rowguidLeistung

jetzt ist natürlich das Problem, wenn ich die anderen rowguid Spalten in meinem updateCommand belassen, dann kommt die fEhlermeldung ebenfalls.

Hier mal mein UpdateCommand:

UPDATE tblAuftrag SET DatumSoll = @DatumSoll, DatumIST = @DatumIST, Freitext = @Freitext, rowguid = @rowguid, Dauer = @Dauer, rowguidLeistung = @rowguidLeistung, rowguidMaterial = @rowguidMaterial, rowguidStatus = @rowguidStatus, rowguidDevice = @rowguidDevice, rowguidBenutzer = @rowguidBenutzer WHERE (rowguid = @Original_rowguid); SELECT DatumSoll, DatumIST, Freitext, rowguid, Dauer, rowguidLeistung, rowguidMaterial, rowguidStatus, rowguidDevice, rowguidBenutzer FROM tblAuftrag WHERE (rowguid = @rowguid)

wenn ich sie rausnehme,dann updatet er sie aber nicht was kann ich denn nun machen?

Mfg
Andi

23.03.2006 - 17:18 Uhr

Hi,

will ein Update auf die folgende Tabelle mit einem DataAdapter machen:

Aufbau: rowguid(Primary),Bezeichnung,Artikel
Updatebefehl:

ofrmMain.sqlDataAdapterAuftrag.Update(ofrmMain.dsGesamt,"tblAuftrag");

ich verändere nun den Name und möchte dies nun speichern aber dann kommt die Fehlermeldung: "Das Aktualisieren von Spalten mit der rowguidcol-Eigenschaft ist nicht zulässig."

Wie kann ich denn das jetzt umgehen? ich verändere die rowguid doch gar nicht oder?

THX
Andi

26.01.2006 - 13:46 Uhr

Hallo,

ich habe eine Software in C# für Windows erstellt. Die Software läuft auf einem Windows Server 2003 und verbindet sich hier über die serielle Schnittstelle mit einem Modem und ruft hierüber LKW Daten ab. Nun ist das Problem, das wenn ich das Programm nicht im Debugger Modus laufen lassen, das Program sich einfach beendet, ohne Fehlermeldung. Ich habe schon versucht die Prozesspriorität hochzusetzen usw. aber leider hat es nichts gebracht.

Weis jemand woran das liegen könnte?

THX
Andi

04.01.2006 - 09:22 Uhr

So hab das jetzt noch einmal probiert. Und die Fehlermeldung kam beim hinzufügen der Row zur DataTable also erstelle ich jetzt die rowguid selber mit System.Guid.NewGuid() und weise sie zu. Dann funktioniert es einwandfrei 🙂

Danke für die Hilfe
Andi

04.01.2006 - 08:50 Uhr

@Sera

ich dachte eigentlich auch das alles automatisch durchgeführt wird und die AutoID egal ist. Aber wahrscheinlich hab ich was falsch gemacht oder habe einen Fehler in der Merge Replication.

Wie müsste ich denn das ganze aufbauen? und wie müsste dann die Tabelle aussehen, sowie die Tabelle dann beim veröffentlichen?

Tabellenstruktur:

IDLeistung
Bezeichnung

z.B.:

0
Fließen legen

MFG
Andi

04.01.2006 - 08:46 Uhr

INSERT INTO BEFEHL(generiert von Visual Studio):

INSERT INTO tblLeistung(Bezeichnung, rowguid) VALUES (@Bezeichnung, @rowguid); SELECT IDLeistung, Bezeichnung, rowguid FROM tblLeistung WHERE (IDLeistung = @@IDENTITY)

Tabellenstruktur:

Tabelle Leistung:
IDLeistung (PrimaryKey)
Bezeichnung
rowguid

ist das die Tabellenstruktur wo du meinst?

03.01.2006 - 16:48 Uhr

Hi,

wie aus den anderen Post´s ersichtlich, versuche ich gerade eine MergeReplikation mit einem SQL Server hinzubekommen und darauf dann per mobilem Gerät und mit einer Anwendung vom PC drauf zuzugreifen.

Jetzt nach lange probieren bin ich daraufgekommen, dass ich vermutlich mit dem PC Programm (erstellt in C#) nicht auf die Hauptdatenbank(auf der alle Daten zusammengeführt werden, Mobile Daten und Daten von der PC Software) auf dem SQL Server zugreifen darf. Also habe ich ich jetzt noch eine zweite DB angelegt, die als Subscriber fungiert. Auf diese verlinke ich nun meine PC Anwendung.

Nun ist aber mein Problem, dass bei der Replikation der sQL Server eine rowguid einfügt, diese ist Datentyp "uniqueidentifier".

Wenn ich nun etwas speichern möchte, dann kommt die fehlermeldung rowguid darf keine null enthalten, ist mir auch klar da dies ja als identifizierung dient aber eigentlich erstellt diese guid der Server. Nun ist die Frage wie bekomme ich denn nun diese guid? und kann es dem DataSet übergeben?

Tabelle sieht so aus:

ID | Bezeichnung | (rowguid

0 Stein 16 hex Wert (automatisch generiert von der DB

Danke für eure Hilfe bin gerade schwer am verzweifeln. X( X(

Andi

02.01.2006 - 17:15 Uhr

Hallo,

folgendes Problem habe eine Software auf einem mobilen Gerät geschrieben, dieses holt sich die DB von einem SQL Server per Merge Replication.

So mein Problem ist nun, dass der sqlserverce die falschen AutoID´s hochzählt und zwar sieht er die bereits gelöschten AutoID´s nicht die es bereits auf dem Server gibt

z.B.

Auf dem SqlServer angelegt: 1,2,3,4,5,6,7,8,9...20
dann wurde auf dem SqlServer die Zahlen: 2,3,4 gelöscht
dann führe ich eine Update zum mobilen Gerät aus und hier wird nun alles in die Sql Server Ce Datenbank eingetragen.

Wenn ich jetzt im mobilen gerät nun eine neue Zeile einfügen will, dann geht er hin und nimmt dann die autoid 2 (eigentlich müsste er 20 eintragen) die ja dann frei ist beim mobilen gerät aber auf dem sql server bereits vergeben und gelöscht wurde.

Jetzt ist das auch kein Problem aber beim nächsten einfügen wird die autoid auf 3 erhöht, dann 4 so danach erhöht er die autoid auf 5 aber die ist ja bereits vergeben, somit es nun zu einer Exception. Nun ist meine Frage, wie kann ich dem SqlServerCe 2 sagen, dass er bei der AutoID bei 20 anfangen soll-> da ja höchste ID und somit muss er hier fortlaufen?

Danke Andi

01.01.2006 - 12:45 Uhr

Hallo

ich schreibe gerade an meine Studienarbeit und nun ist mein Problem, dass ich nicht genau weiss in welcher Normalform genau meine Tabelle sich befindet.

Kann mir das jemand sagen?

Tabellenaufbau:
Kundennummer(Primärschlüssel)
Bezeichnung
PLZ
Ort

Jetzt will ich in der Arbeit schreiben, dass man das ganze auch weiter Normalisieren hätte können, aber da ist die Frage in was für einer Normalform nun dies wieder ist. Sieht wie folgt aus:

3 Tabellen.

  1. Tabelle Kunde Aufbau:
    Kundennummer (Primärschlüssel)
    Bezeichnung

  2. Tabelle Zwischentabelle:
    Kundennummer
    OrtsID

  3. Tabelle Ort:
    OrtsID
    PLZ
    Ort

Danke für eure Hilfe
Andi

31.12.2005 - 20:15 Uhr

Hallo,

leider sind auf den Tabellen bereits Primärschlüssel festgelegt.

Mfg
Andi

30.12.2005 - 17:17 Uhr

Hallo,

ich habe eine MSDE laufen und hierauf meine DB.

Nun habe ich eine Software auf dem PC und eine auf einem mobilen Gerät.

Beide Gerät greifen auf die gleiche datenbank zu das mobile Gerät hierbei über Merge Replikation.

Nun ist meine Frage wie bekomme ich es hin, dass meine Software auf dem PC immer die aktuellen Daten vom Server erhält. Ich habe die gesamten Tabellen in einem DataSet, wie kann ich nun diese Tabellen einfach und Schnell aktualisieren.

Ich hatte gedacht man könnte einfach ein 2. Fill ausführen aber das funktioniert nicht da macht er mir einfach noch einmal die gleichen Einträge dazu.

Mfg
Andi

30.12.2005 - 13:41 Uhr

hallo,

falls es am umschalten liegt:
setzt doch eine Sperrvariable solange deine Aktualisierung läuft oder disable die Tab Reiter solange.

MFG
Andi

29.12.2005 - 10:15 Uhr

Hallo,

habe jetzt das Problem entdeckt 🙂 Die Funktion automatisch die ID zu erhalten, macht der DataAdapter bereits und ich muss es nicht extra machen. Also ist meine Abfrage unnötig. Deshalb ist vermutlich auch die Spalte IDDevice schreibgeschützt.

Also hat sich erledigt, manchmal ist der DataAdapter doch schlauer als gedacht 🙂

MFG
Andi

29.12.2005 - 09:21 Uhr

Hallo,

habe eine MSDE (Desktop Engine) Server bei mir laufen mit einer entsprechenden DB für meine Anwendung.

Ich habe hier die Tabelle Device. Aufbau: IDDevice(AutoID), Bez, Standort,... usw.

Das ganze habe ich nun im meinem Programm mit einem DataSet und dem hinzufügen der Tabelle device realisiert. Insert, Update usw. funktioniert einwandfrei über SqlDataAdapter. Nun möchte ich aber da die Datenbank von mehrern Clients angesprochen wird, das die Autoid immer richtig ist also habe ich wie bei OleDbDataadapter im Event RowUpdated versucht die aktuell vergeben ID zu ermitteln:


if (e.StatementType == StatementType.Insert) 
{ 
  System.Data.SqlClient.SqlCommand cmd = new   System.Data.SqlClient.SqlCommand("SELECT @@IDENTITY",sqlConnection); 
  // in Tabelle abspeichern 
  e.Row["IDDevice"]=Convert.ToInt64(cmd.ExecuteScalar()); 
} 

führe ich dies aber nun aus dann kommt die Fehlermeldung, dass die Spalte IDDevice schreibgeschützt wäre. Kann mir jemand sagen woran das liegt? Ich finde es leider nicht heraus. ich erhalte vom ExecuteScalar auch die richtige ID zurück da besteht nach meiner Ansicht auch nicht das Problem sonder eher im DataSet aber wo kann man da eine Spalte den Schreibschutz verpassen?

Ich habe die Tabelle Device an ein DataGrid gehängt. ich habe aber bereits probiert, vor dem reinschreibeversuch (e.Row..) diese zu entkoppeln hat aber auch nichts gebracht.

Weiss jemand was da schief läuft?

Danke für jede Hilfe

Andi

20.12.2005 - 16:31 Uhr

Hallo,

ich versuche gerade eine Tabelle in einem DataGrid anzuzeigen. Hierbei ist die Tabelle mit Fremdschlüsseln bestückt so z.B. MaterialID. Nun würde ich gerne, dasss anstatt der MaterialID(z.B.:1) jetzt der Klartext kommt der in der Tabelle Material steht z.B. Bügeleisen.

Wie kann man das realisierien? oder muss ich mir eine eigene Tabelle zusammenbasteln und dann dem DataGrid übergeben?

Vielen Dank für die Antworten

MFG
Andi

04.11.2005 - 16:30 Uhr

Hallo,

ich habe eine Anwendung programmiert, die von mehreren Benutzern gleichzeitig verwendet wird. Hierbei verwende ich eine ACCESS Datenbank, diese Relational aufgebaut. So ich habe nun ein Projekt und hierzu verschiedene Aufgaben gelöst durch tblProjekt->Zwischentabelle->tblAufgaben. dies habe ich auch im DataSet mit Relationen nachgebildet und ich kann auch alles wunderbar benutzen. Mein Problem ist aber nur, wenn ich eine neue Aufgabe anlege, wird in der DB automatisch eine AufgabenID generiert. Jetzt sieht es aber so aus, das diese Zahl nicht mit der Zahl in meinem Datasettabelle übereinstimmt also in der DB ID = 44 in meiner Datasettabelle ID = 35 somit kann er nun natürlich nicht die Zwischentabelle updaten, da die Zahl nicht existiert.

Hier mal der Code:


DataRow myRowNew = oDSGesamt.tblAufgabe.NewRow();
myRowNew["Betreff"] = myRowNeueStAufgabe[0]["Bezeichnung"];
myRowNew["PrioritätID"] = 0;
myRowNew["Beginn"] = DateTime.Now;
myRowNew["Fällig"] = DateTime.Now.AddMinutes(Convert.ToInt32(myRowNeueStAufgabe[0]["FolgeZeit"]));
myRowNew["Erinnerung"] = false;
myRowNew["MNr"] = oConfig.SetGetAktMitarbeiter;
myRowNew["PermanenteErinnerung"] = false;
myRowNew["ZeiteinheitID"] = 0;
myRowNew["Status"] = false;
oDSGesamt.tblAufgabe.Rows.Add(myRowNew);
//dann dem Projekt zuweisen
DataRow myRowNewRel = oDSGesamt.tblProjektAufgabe.NewRow();
myRowNewRel["PID"] = oConfig.SetGetAktProjektID;
myRowNewRel["AufgabeID"] = myRowNew["AufgabeID"];
oDSGesamt.tblProjektAufgabe.Rows.Add(myRowNewRel);

//jetzt Updaten gegenüber der DB
oleDbDataAdapterAufgabe.Update(oDSGesamt,"tblAufgabe");
//__--> hier tritt der Fehler auf da die AufgabeID nicht existiert
oleDbDataAdapterProjektAufgabe.Update(oDSGesamt,"tblProjektAufgabe");
oDSGesamt.AcceptChanges();


Weiss jemand wie man ihm die richtige Zahl/AufgabenID übergeben kann? Oder mache ich hier etwas vollkommen falsch?

Hier noch der Update Befehl:
für Tabelle Aufgabe:
UPDATE tblAufgabe SET Beginn = ?, Betreff = ?, Erinnerung = ?, ErinnerungDatum = ?, Fällig = ?, Kommentar = ?, MNr = ?, PermanentDatum = ?, PermanenteErinnerung = ?, PrioritätID = ?, Status = ?, ZeiteinheitID = ? WHERE (AufgabeID = ?)

für Tabelle ProjektAufgabe:
UPDATE tblProjektAufgabe SET AufgabeID = ?, PID = ? WHERE (LNummer = ?)

MFG
Andi

24.10.2005 - 09:18 Uhr

Hallo,

hier mal Code


//Sortieren
					DataRow[] oRowSortDokumente = oDtAktDokumente.Select("","Datum ASC"); //Funktioniert nicht
					for (int i= 0; i< oRowSortDokumente.Length; i++)
					{
						listViewDokumente.Items.Add(Convert.ToDateTime(oRowSortDokumente[i]["Datum"]).ToShortDateString());
						//jetzt der ListView die Werte zuweisen
						listViewDokumente.Items[i].UseItemStyleForSubItems = false;
						listViewDokumente.Items[i].SubItems.Add(oRowSortDokumente[i]["Pfad"].ToString());
						listViewDokumente.Items[i].SubItems[1].Font = myFontUnderline;
					}


was soll dieser Bezwecken? Die listView soll gefüllt werden und zwar mit Spalte1: Datum Spalte2: mit Dokumentenname und vorher soll es noch sotiert werden nach der Spalte Datum. Nun ist mein Problem, wenn ich das ganze laufen lassen und keine Sortierung reinbaue(DataRow[] oRowSortDokumente = oDtAktDokumente.Select("","")😉 dann wird alles richtig in der ListView angezeigt. Sobald ich aber die sortierung rein mache, wird der Dokumentenpfad nicht mehr angezeigt, dafür wird aber das Datum richtig in der Reihenfolge sortiert.

Weiss jemand was ich hier falsch mache?

THX Andi

19.10.2005 - 11:24 Uhr

Hallo falls falscher Thread - dann tut es mir leider aber ich wusste nicht genau wohin dieses Thema genau passt.

So mein Problem,

ich mache ein Databinding auf mehrer Textboxen.

Dann laufe ich mit :

this.BindingContext[ds.Tables["tblKunden"]].Position ++;

durch die einzelnen einträge.

Jetzt möchte ich auf einen Eintrag direkt springen und zwar mit einer Suche.
Nehme hierzu einfach ein Select auf die Tabelle da dies schön schnell geht

DataRow[] myRow = fMain.ds.Tables["tblKunden"].Select("KdNo = " + Convert.ToInt32(tbKdNrSuche.Text));
//gefunden dann zuweisen über die AutoID
this.BindingContext[ds.Tables["tblKunden"]].Position = Convert.ToInt32(myRow[0]["ID"].ToString());

Leider funktioniert dies nicht so er findet zwar die richtige Row aber leider stimmt dann die Position nicht und ich bekomme die falschen kundendaten angezeigt.

Wie kann ich denn nun ihm die richtige Position übergeben?

Habe versucht es mit einer for Schleife zu machen also von vorne bis hinten durchlaufen und dann wenn gefunden ihm die Position zu geben aber dies dauert leider bei 5000 Einträgen zu lange.

Also wie kann ich jetzt die aktuelle Zeile ihm übergeben, die gerade ausgewählt wurde?

Früher VB,hatte ich ja mein Recordset und konnte hier mit seek danach suchen und hatte dann die Position der Tabelle auf die er gerade steht -> also die Position

Mfg
Andi

11.10.2005 - 11:32 Uhr

Danke dir Herbivore,

habe es jetzt hinbekommen 🙂 falls jemand mal das gleiche Problem hat:


protected override int GetMinimumHeight() 
{ 
//_TextBox.Textbox abgeleitet von DataGridTextBoxColumn()
Graphics g = _TextBox.TextBox.CreateGraphics();		
CurrencyManager cur = (CurrencyManager)this.DataGridTableStyle.DataGrid.BindingContext[this.DataGridTableStyle.DataGrid.DataSource,this.DataGridTableStyle.DataGrid.DataMember];
string s = GetColumnValueAtRow(cur,this.DataGridTableStyle.DataGrid.BindingContext[this.DataGridTableStyle.DataGrid.DataSource,this.DataGridTableStyle.DataGrid.DataMember].Position).ToString();
return _TextBox.TextBox.PreferredHeight + (int) g.MeasureString(s,_TextBox.TextBox.Font).Height; 
} 

11.10.2005 - 10:56 Uhr

Sodele,

hab jetzt mal ein bisschen rumprobiert. Weiss jetzt auch welchen Wert ich ändern muss doch wie kann ich jetzt ermitteln wie hoch die einzelne Zeile sein muss?

ich überschreibe die Methode GetMinimumHeight() und gebe hier den Wert PreferredHeight an somit wird die Zeile höher.


protected override int GetMinimumHeight() 
{ 
return _TextBox.TextBox.PreferredHeight + 300; 
} 

Doch wie kann ich jetzt den hinterlegten Text erreichen und schauen wie hoch / lang dieser ist?

THX Andi

11.10.2005 - 08:28 Uhr

Hi,

vielen Dank für den Hinweis. Wie bekomme ich es aber es jetzt hin, das sich die Höhe der Spalte entsprechend der Menge Text in meiner Spalte anpasst?

Mfg
Andi

10.10.2005 - 17:22 Uhr

Hallo ich möchte gerne in einem DataGrid in einer Spalte den Text mehrzeilig anzeigen lassen, da dies eine Notiz ist. Leider bekomme ich es nicht hin weiss jemand wie man das hinbekommt?

THX Andi

27.09.2005 - 13:28 Uhr

Hi,

ich habe eine Listview mit View = Details.

ich möchte nun das wenn man auf die ListView einen Doppelclick macht, einen FileExplorer öffnet doch leider bekomme ich nur ein Event, wenn bereits ein Eintrag vorhanden ist. Wieso bekomme ich den kein DoubleClickEvent, wenn keine Einträge in der ListView sind? Kann ich das beheben?

THX
Andi

23.09.2005 - 11:13 Uhr

Hi noodles,

könntest du mir das an einem Beispiel zeigen wie das funktioniert? Komm nicht dahinter 🤔, wie ich das jetzt mit meinen 3 Tabellen umsetzen kann.

THX
Andi

23.09.2005 - 09:37 Uhr

Tag zusammen,

ich habe folgendes Problem, ich habe 3 Tabellen (Projekt, ProjektAufgabe, Aufgabe) diese 3 tabellen stehen miteinander in Relation und zwar:

Projekt 1->* ProjektAufgabe *<-1 Aufgabe wie ihr seht ist die tabelle ProjektAufgabe meine Zwischentabelle, da ein Projekt mehrer Aufgaben besitzen kann.

So ich habe nun um dies zu realisieren für jede Tabelle einen DataAdapter generiert und dazu ein typisiertes Dataset.

Jetzt möchte ich das ich anhand der Projektnummer alle dazugehörende Aufgaben erhalte. Wie kann ich das nun anstellen?

Ich habe versucht über select() zu gehen aber dann erhalte ich eine Fehlermeldung da er die speziellen tabellenspalten nicht findet.

DataRow[] myRow = oDSGesamt.Tables["tblAufgabe"].Select(oDSGesamt.tblProjekt.NameColumn + "= 'August'");

Aber ich denke ich mache hier etwas falsch in meiner Vorgehensweise. In Access würde ich mir jetzt eine Join Anweisung zusammenbauen aber wie bekomme ich das jetzt mit ADO hin? Ich habe ja bereits alle Informationen in meinem DataSet ich müsste jetzt nur eine möglichkeit finden diese Informationen zu erhalten.

Ich könnte natürlich mithilfe einer Schleife die entsprechenden Werte herauslesen doch ich hoffe es gibt eine einfachere und bessere Lösung.

THX Andi

16.09.2005 - 08:02 Uhr

Hi wie kann ich denn beim Compact Framework die Größe einer Flash Disk ermitteln oder eines beliebigen Laufwerkes?

THX
andi

13.09.2005 - 09:25 Uhr

Danke für den Tipp.

Hat jetzt funkioniert. Dachte er würde wenn man keinen Encoding angibt Unicode nehmen tja ist wohl nicht.

THX
Andi

13.09.2005 - 08:36 Uhr

Hi,

ich erstelle auf einem mobilen Gerät eine Excel Datei.

string sExpName = "waage_" + DateTime.Now.ToString("ddMMyy") + "_" + DateTime.Now.ToString("HHMM") + ".xls";
StreamWriter sw = new StreamWriter(sExpPath + sExpName);
//Die Datatable durchlaufen
sw.WriteLine("Probenummer" + "\t" + "Datum" + "\t" + "Uhrzeit" + "\t" + "spezifisches Gewicht" + "\t" + "Stärkegehalt" + "\t" + "Trockensubstanzgehalt");
				

Daraufhin übertrage ich das ganze auf den PC und schaue mir das ganze im Excel an.
Jetzt ist aber mein Problem, dass dann das "ä" von Stärkegehalt falsch angezeigt wird und zwar als Sonderzeichen "ä" wenn ich mir das ganze aber im Editor anschaue, dann steht da ein richtiges "ä" woran kann denn das liegen?

THX
Andi

06.09.2005 - 13:00 Uhr

Vielen Dank hab jetzt die 2. Variante gewählt.

Bin nicht darauf gekommen Form zu nehmen

MFG
Andi

06.09.2005 - 12:01 Uhr

Hallo,

sodele mal wieder für die Profis unter euch bestimmt wieder eine dumme Frage.

Ich habe einen Info Bildschirm gebastelt der in mehreren Programm zum einsatz kommen soll. Mein Problem ist es nun, das wenn ich den Info Bildschirm aufrufe ich die Form von der der Infoschirm aufgerufen wird unsichtbar gemacht werden soll. Ja ihr fragt euch bestimmt warum weil ich leider unter CF programmieren muss und da geht es leider nicht anders 😦.

Jetzt ist meine Frage wie bekomme ich es hin einen Konstruktor zu basteln, der eine beliebige Form erwartet ich dachte mir ich könnte hier ein object nehmen aber das klappt nicht oder mach ich hier etwas falsch?


//Konstruktor
public dlgInfo(string sProgrammName, string sProgrammVersion,object ofrmMain)
{
 //hier sollte es nun möglich sein die übergeben Form auszublenden

ofrmMain.Visible = false; // geht nicht da CSharp es nicht als Form erkennt
}

hab auch schon probiert eine Klasse zu erstellen, die von System.Windows.Forms.Form erbt und das Object dieser Klasse zu übergeben funktioniert leider auch nicht hab dann nur die Properties MouseDown und Up zu Verfügung.

Wie kann ich denn das bewerkstelligen?

tHX
andi

02.09.2005 - 08:03 Uhr

Vielen Dank für die Infos 🙂

Das mit den Panels hab ich mir fast gedacht aber mit dem Visual Studio Designer macht das wirklich wenig spass 🙁

Tja das CF ist eh sehr bescheiden hoffe mal das 2.0 besser wird -> denke aber mal nicht.

MFG
Andi

01.09.2005 - 16:49 Uhr

Anderes Bedienkonzept?

Hast du da mal einen Vorschlag wie man soetwas bewerkstelligen kann?

MFG

01.09.2005 - 15:31 Uhr

@svenson

hi,

wie meinst du das mit Hauptfenster Caption auf nix setzen? Hab das probiert

this.Text = "" -> da ich leider keine Caption gefunden habe
frmDaten my = new frmDaten();
my.ShowDialog();

aber es funktioniert leider nicht

Das Programm hab ich übrigens für Windows CE .net 4.0 erstellt. Liegt es vielleicht daran das es nicht funktioniert?

OpenNetCF kenn ich schon thx für Tipp

@LastGentleman

hab ich bereits installiert
mfg Andi

01.09.2005 - 13:59 Uhr

Hallo,

wie bereits erwähnt habe ich eine Anwendung für intelligente Anwendungen (Compact Framework) geschrieben.

Nun habe ich ein kleines Problem und zwar habe ich mehrere Forms aufruf:


//wird von der frmMain aufgerufen
frmDaten my = new frmDaten();
my.ShowDialog();

die Form wird nun auch angezeigt, alles so wie gewollt.

So jetzt kommt aber mein Problem wenn ich nun die Tastenkombination ALT TAB drücke, komme ich wieder auf die frmMain zurück aber genau dies soll ja nicht gehen, deshalb rufe ich es ja extra mit ShowDialog auf. Ist das nur bei meinem mobilen gerät so oder kennt jemand sonst noch dieses Problem und weiss hierzu eine Lösung? ?(

MFG
Andi

09.08.2005 - 15:27 Uhr

Kann ich leider nicht machen da ich bei Mobile anwendungen und Compact Framework irgendwie kein typisiertes DataSet finde

09.08.2005 - 15:13 Uhr

Hallo,

ich erstelle gerade eine Anwendung für ein mobiles Gerät und verwende als DB MS sqlce 2.0

ich habe die gesamten dataadapter erstellt und auch das DataSet gefüllt. Nun würde ich gerne noch die Relationen hinzufügen. Jetzt ist meine frage kann man dies irgendwie einfach erledigen? anstatt alle Relationen einzeln durchzuklappern wie so:

oDataSet.Relations.Add("RelOrtMitarbeiter",oDataSet.Tables["tblOrt"].Columns["fldPLZ"],oDataSet.Tables["tblMitarbeiter"].Columns["fldPLZ"]);

wie kann ich denn das einfacher bewerkstelligen? meine dataAdapter wissen ja eigentlich die Relationen von der DB her kann ich nun das auch irgendwie meinem Dataset beibringen?

THX Andi

08.08.2005 - 11:59 Uhr

Hi,

es kommt ganz darauf an was du in der Funktion/ Methode machst? Läufst du hier durch eine Schleife ? oder was machst du hier und rufst du vielleicht einen Arbeitsthread auf?

Nehmen wir an du hast die Variante Methode mit Schleife dann könntest du einen Button (für Abbruch) nicht disablen sondern aktiviert lassen wenn nun dieser Button gedrückt kannst du eine Variable z.b. bAbbruch auf true setzen und in der Methode in der die Schleife läuft kannst du nun überprüfen, ob die Variable bAbbruch auf true steht wenn ja dann kannst du ja alles abbrechen und aus der schleife hinausspringen.

Mfg
Andi

04.08.2005 - 14:50 Uhr

hi,

wie kann ich denn die Insert, Delete .. Anweisungen für DataAdapter selbst erstellen? Kann mir jemand kurz einen Code zeigen habe es mit MSDN probiert funktioniert aber leider nicht 🙁

MFG
Andi

04.08.2005 - 09:09 Uhr

Moin zusammen,

ich versuche gerade mit Compact Framework und dem SqlServerCe eine Applikation zu aufzubauen.

Mein Problem ist nun ich weiss leider nicht wie ich die Insert, Update und Deletes hinbekomme. Ich möchte nicht mit dem CECommandBuilder arbeiten sondern meine Anweisungen selber schreiben.

Die Datenbank hab ich bereits angelegt sowie die benötigten Tabellen.

hier mal der bisherige Code von mir:


//Datenbank existiert jetzt dann die DataAdapter sowie Commands erstellen
//DataAdapter für tblOrt
oDAtblOrt = new SqlCeDataAdapter("SELECT fldPLZ,fldOrt FROM tblOrt",oConnection);
oDAtblOrt.MissingSchemaAction = MissingSchemaAction.AddWithKey;
oDAtblOrt.InsertCommand = new SqlCeCommand("INSERT INTO tblOrt(fldPLZ,fldOrt) VALUES (?,?)",oDAtblOrt.SelectCommand.Connection);
oDAtblOrt.UpdateCommand = new SqlCeCommand("UPDATE tblOrt SET fldPLZ = ?, SET fldOrt = ? WHERE fldPLZ = ?",oDAtblOrt.SelectCommand.Connection);
oDAtblOrt.DeleteCommand = new SqlCeCommand("DELETE FROM tblOrt WHERE fldPLZ = ?",oDAtblOrt.SelectCommand.Connection);

danach muss man ja jetzt die einzelnen Insert, Update,Delete schreiben:


//insert
oDAtblOrt.InsertCommand.Parameters.Add("@fldPLZ",SqlDbType.Int);
oDAtblOrt.InsertCommand.Parameters.Add("@fldOrt",SqlDbType.NVarChar,80,"fldOrt");
//Update
oDAtblOrt.UpdateCommand.Parameters.Add("@fldPLZ",SqlDbType.Int);
oDAtblOrt.UpdateCommand.Parameters.Add("@fldOrt",SqlDbType.NVarChar,80,"fldOrt");
//Delete
oDAtblOrt.DeleteCommand.Parameters.Add("@fldPLZ",SqlDbType.Int);
 

so nun ist die Frage wie bekomme ich nun Daten in die Datenbank über den Dataadapter ich hab das mal so probiert als ob ich das ganze mit einem CeCommandBuilder erstellt hätte


//TEST
DataRow myRow;
oDAtblOrt.Fill(oDataSet,"tblOrt");
myRow = oDataSet.Tables["tblOrt"].NewRow();
myRow["fldPLZ"] = 2344;
myRow["fldOrt"] = "Bräunlingen";
oDataSet.Tables["tblOrt"].Rows.Add(myRow);
oDAtblOrt.Update(oDataSet,"tblOrt");

aber hier bekomme ich dann die Fehlermeldung:
NullReference Exception "fldPLZ"

weiss jemand was ich da falsch mache?

THX
Andi