sawMedlem sedan mars 20011 880 inlägg Jag försöker att (om inte SQL Servern är igång) starta upp den via kod.
public System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.CreateNoWindow = true; p = System.Diagnostics.Process.Start("MSSQL$SAWDATA");
Jag får felet:
SQL Servern saknas eller återkomst nekad".
Jag har också försökt så här:
string command = "net start MSSQL$SAWDATA";
med samma resultat. Nägra förslag?
nikoMedlem sedan juni 20022 599 inlägg System.ServiceProcess.ServiceController s = new System.ServiceProcess.ServiceController();
s.MachineName = "datornamn"; s.ServiceName = "MSSQLSERVER";
try {
if (s.Status.ToString() != "Running") {
s.Start();
}
}
catch(Win32Exception myEx) {
//Gör nåt.
}
Lägg också till en referens till System.ServiceProcess.dll under Project->Add Reference. Sen vet jag inte riktigt vad MSSQL$SAWDATA betyder. Är det nån "named instance"?
sawMedlem sedan mars 20011 880 inlägg Hej Niko och tack för ett snabbt svar. Jag skall genast testa detta.
När jag installerade min SQL Server så fick den det namnet.
Om jag går in på tjänster i administrationsverktyg så heter den MSSQL$SAWDATA .
Om jag går ut via dospromten så kan jag starta/stoppa med net start MSSQL$SAWDATA .
sawMedlem sedan mars 20011 880 inlägg Jag fick problem med en gång...
System.ServiceProcess.ServiceController
E:\MeraTest\Test\Form1.cs(179): The type or namespace name 'ServiceProcess' does not exist in the class or namespace 'System' (are you missing an assembly reference?)
Är det någon referens som jag har missat?
nikoMedlem sedan juni 20022 599 inlägg Ja .. Länkar du mot System.ServiceProcess.dll som jag skrev ovan?
sawMedlem sedan mars 20011 880 inlägg Jag missade den, sorry.
Det blev inte så lätt ialla fall, jag får ett error:
Objectreferensen har inte angets till en instans av ett object.
Jag vet nog inte vad jag skall göra åt det...
nikoMedlem sedan juni 20022 599 inlägg Kör du exakt koden ovan (förutom dator- och servicenamn)? Det låter inte som om du skulle kunna få det felet isåf?
sawMedlem sedan mars 20011 880 inlägg Så här ser det ut nu:
using System.ServiceProcess;
System.ServiceProcess.ServiceController s = new System.ServiceProcess.ServiceController();
s.MachineName = "sawdata."; s.ServiceName = "MSSQL$SAWDATA";
try
{
if (s.Status.ToString() != "Running")
{
s.Start();
string CONstring = "Data Source=SAWDATA\\SAWDATA; Initial Catalog=Melodi;Trusted_Connection=yes";
con = new SqlConnection(CONstring);
this.Text="Connectad till: " + con;
}
}
catch(Win32Exception myEx)
{
MessageBox.Show(myEx.Message,"Här blev det fel",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
Jag hittade felet, det var att jag försökte att använda mig av connections.
Nu får jag inga fel, men ingenting görs...
nikoMedlem sedan juni 20022 599 inlägg Ja, alltså anropet till Start är asynkront vilket innebär att du inte kan använda SQL-servern redan på nästa rad.
s.Start();
s.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running);
string CONstring = ..
(Egentligen bör du ha nån time-out så att inte programmet hänger sig om starten misslyckas.)
Annars kan jag inte se nåt fel. Samma kod funkar hos mig. Och du verkar ju inte komma in i catch-blocket?
/red:
Prova ändra if-satsen till:
if (s.Status != System.ServiceProcess.ServiceControllerStatus.Running)
Det slog mig just att min första variant kanske funkar hos mig för att jag råkar köra engelsk 2000?
sawMedlem sedan mars 20011 880 inlägg Felet är att jag aldrig kommer in i if-satsen.
Mycket märkvärdigt...
nikoMedlem sedan juni 20022 599 inlägg
Felet är att jag aldrig kommer in i if-satsen.
Ja, men det kan ju bara betyda att den redan är igång? Du såg min redigering väl?
sawMedlem sedan mars 20011 880 inlägg Nej jag gjorde inte det, men nu.
Och nu fungerar det, tack niko.