hab mir das mal bei MSDN angeschaut und mein Verbindungsaufbau abgeändert. Datenbankverbindung funktioniert auch. SO sollte es besser sein oder?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; //Bekanntmachung des Namensraums für den SqlClient-Datenprovider
namespace DatenbankMitADO
{
public partial class Form1 : Form
{
SqlConnection verbindung = null;
SqlCommand befehl = null;
SqlConnectionStringBuilder conBuilder = new SqlConnectionStringBuilder();
public Form1()
{
InitializeComponent();
conBuilder.DataSource = ".\\SQLExpress";
conBuilder.IntegratedSecurity = true; //Windows-Anmeldung zur Authentifizierung
conBuilder.AttachDBFilename = "C:\\Users\\Andreas\\Desktop\\DatenbankProjekt\\DatenbankMitADO\\Database1.mdf";
conBuilder.UserInstance = true;
using (verbindung = new SqlConnection(conBuilder.ConnectionString))
{
try
{
verbindung.Open();
MessageBox.Show("DB-Verbindung erfolgreich hergestellt");
}
catch (Exception ex)
{
MessageBox.Show("Fehler: " + ex.Message, "Datenbankfehler");
}
}
}
private void button1_Click_1(object sender, EventArgs e)
{
using (verbindung = new SqlConnection(conBuilder.ConnectionString))
using (befehl = new SqlCommand(textBox1.Text, verbindung))
{
try
{
verbindung.Open();
textBox2.Text = befehl.ExecuteScalar().ToString();
}
catch (Exception ex)
{
MessageBox.Show("Fehler: " + ex.Message, "Datenbankfehler");
}
}
}
private void button2_Click_1(object sender, EventArgs e)
{
using (verbindung = new SqlConnection(conBuilder.ConnectionString))
using (befehl = new SqlCommand(textBox3.Text, verbindung))
{
try
{
verbindung.Open();
befehl.ExecuteNonQuery(); //schickt SQL-Kommando ab
MessageBox.Show("Kommando erfolgreich abgeschickt");
}
catch (Exception ex)
{
MessageBox.Show("Fehler: " + ex.Message, "Datenbankfehler");
}
}
}
}
}
DarthZiu schrieb:
Noch ne Frage dazu: Wenn ich das so mache, wie ihr schreibt, dann muss trotzdem .NET auf dem System installiert sein, weil der DLL-Code dann immer noch in CLI ist?
Logischerweise ja. Nur weil du den Aufruf in einer anderen Sprache machst, gelten ja nicht andere Abhängigkeiten.
DarthZiu schrieb:
Okay. Gibt's da irgendwo ein Tut oder Beispiele, wie man das mit dem COM oder C++/CLI-Wrappern macht? Würde mir das gern anschauen, bevor ich eine Entscheidung treffe.
Zu COM sollte einiges existieren (und ich kann dir sagen: mit C++ fand ich COM immer schrecklich), und zu C++/CLI ist es eigentlich ganz einfach gesagt (aber mühsam umzusetzen): Verpasse der C++/CLI-Wrapper DLL ein C-Kompatibles Interface (Sprich: Keine Klassen, nur Datentypen die in C erlaubt sind...), und steuere innerhalb dieser dll die C#-Dll an. C++/CLI ist eine Sprache die ins besondere für die Schnittstelle zwischen der managed und nativen Softwarewelt geeignet ist, da sie beides versteht.
So viel ich weiß kann man die "unsafe" Zeiger nur mit bestimmten Datentypen benutzen (d.h. byte, int, etc.) und nicht allgemein für jede beliebige Managed-Struktur.
s.a. http://www.codeproject.com/KB/dotnet/ReadingStructures.aspx (Solution Attempt 4: Unsafe Generic Approach)
Danke schonmal:) Ja ich hab mein Projekt vor langem mal auf nen rechner getan, und wollte wissen, ob ich damls die Debug odre Release version verwende habe:)
So, noch einmal in richtiger Form und diesmal mit Account
Super, danke jetzt funktioniert es.
Lösung: Einfach den Code in das MouseDown-Event reinpacken, wie Th69 es gesagt hat.
private void listBoxAll_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
string[] files = new string[listBoxAll.SelectedItems.Count];
int i = 0;
foreach (var item in listBoxAll.SelectedItems)
{
files[i] = m_SearchedFiles[listBoxAll.SelectedIndices[i]].Name;
i++;
}
DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy);
}
}
VG
Was willst du? Willst du das programmatisch machen oder was willst du? Willst du nur ne Textdatei öffnen und sie einlesen oder die Textdatei anzeigen? Beschreib mal vernünftig was du willst, wird ja kein Mensch schlau drauß.
ja mit dem kann ich mich verbinden.
Habs grad hinbekommen mit einem anderen conn-string:
const string verbindungsstring =
// Attribute der Verbindungszeichenfolge:
"Data Source = .\\SQLExpress;" +
"AttachDbFilename = C:\\Users\\Andreas\\Desktop\\DatenbankProjekt\\TestDB.mdf;" +
"Integrated Security = True;" +
"Connect Timeout = 30;" +
"User Instance = True;";
So funktioniert es. Vielen Dank für den Tipp.
Wenn du mit C# oder Java für eine virtuelle Maschine programmierst musst der Nutzer diese zwangsweise auch installieren, wenn er es nicht schon getan hat. Ansonsten musst du halt für deine CPU und dein OS programmieren mit C/C++/D/Delphi/VB etc. oder halt schauen ob du die Interpreter/JIT-Compiler Sprache gewrappt bekommst.
G hibbes
Danke für die Antwort.
Dann werde ich wohl beim Start des zweiten Windows eine Instanz des Canvas des Haupt-Fensters übergeben um so auf die Child-Elemente zugreifen zu können.
Fedaykin schrieb:
Besten dank schonmal. Klappt gut. Rein der Interessenhalber zum int, was genau ist das problem dort? Beim Shift bleibt immer das Vorzeichbit unberührt? Es wird also nur 1-31 Geshiftet ? Oder hab ich das falsch Verstanden.
Genau.
Problematisch ist aber auch, dass man nicht einfach das das Vorzeichenbit wegmaskieren kann, bzw. dazu eben negative Dezimalwerte verwenden muss, was einfach nur befremdlich wirkt. Wenn man Bitoperationen durchführt in C#, sollte man wenn möglich einen vorzeichenlosen Typ nehmen. Erspart einem eine Menge Probleme.
Grüssli
adsf schrieb:
Wieso gibt es den nicht in C#?
Weil Qt, WinForms und WPF völlig verschiedene Frameworks sind? Was für eine Antwort erwartest du darauf?
Ich persönlich würde dies sowieso eher mit einem ToolTip lösen, wie es unter Windows eigentlich üblich ist. Unter WinForms geht das zum Beispiel damit:
http://msdn.microsoft.com/en-us/library/system.windows.forms.tooltip.aspx
Bei WPF müsste ich zuerst nochmals nachschlagen, aber geht auch irgendwie
Grüssli
CSL schrieb:
Wichtig ist, kein blankes "Parse", man sollte vorher überprüfen ob eine Konvertierung klappt.
Im falle von double Werten sollte noch die Culture mit angegeben werden.
Wieso? Damit eliminierst du jegliche Fehler, was ich nicht gerade für sinnvoll halte. Nun kann man auch sowas eingeben und es gibt ein korrektes Resultat aus:
"sef+++sf+es+efs+++esf+es+es+fes+fes+fes++ef+5" → Resultat: 5
Oder auch das geht:
"Ich bin ein Text, den niemand kontrolliert und deswegen habe ich ein korrektes Resultat! Ist das nicht toll?" → Resultat: 0
Ich würde auch auf die StringSplitOptions.RemoveEmptyEntries verzichten. Man soll Fehler schliesslich nicht schlucken, sondern behandeln
Grüssli
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=236
Wichtige Information für Serialisierung mit XML. Alle, aber auch alle deine Werte die du Serialisieren willst müssen, öffentliche Getter wie Setter haben.Es muss ein Standardmäßiger öffentlicher Ctor vorhanden sein.
Aber Code oben sollte dir helfen.