Kald undersøgelses stored procedure og opdater eller afbryd
HejJeg vil gerne lave app i C#, hvor jeg først undersøger, om et sæde er ledigt, og i tilfælde af true, så skal der opdateres i tabellen booking, ellers afbryd med besked om ingen ledige sæder. Der er et ledigt sæde i FlySædeStatus, flysædeID = 6, den 2012-07-02-09:00:00.000, men det ser ud som min kode ikke virker ved opdatering af FlyBookingtabellen? Her er min sql tabel, sp og C# kode, idet jeg får fejlen: "Incorrect syntax near 'Betalt'.", når jeg via formen indtaster AfgangFra = CPH, AfgangTil = NY AfGangDatoTid = 2012-07-02-09:00:00.000, PasNummer = 123123123, BilletStatus = Betalt
kan du hjælpe?:
Min tabel i MS SQL SERVER er oprettet sådan med udfyldt testdata:
Create Table FlyBooking(
BookingID int identity (1, 1) Primary KEY
,AfgangID int not null
references FlyAfgang
on delete no action
on update no action
,PasNummer int not null
references FlyPassager
on delete no action
on update Cascade
,BookingDatoTid datetime not null
,BookingStatus nvarchar (15) not null
check(BookingStatus ='Bestilt' or BookingStatus='Betalt')
);
indsættelse af testdata i FlyBooking i MSMSS:
Insert FlyBooking (AfgangID, PasNummer, BookingDatoTid, BookingStatus)
Values ('1','111111111','2012-04-03 09:30:00:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('8','111111111','2012-04-03 09:30:00:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('1','123123123','2012-05-03 10:30:00:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('9','123123123','2012-04-03 10:30:00:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('2','123456789','2012-04-09 18:30:19:000', 'Bestilt'); --- ingen tilbagerejse
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('1','321321321','2012-05-09 18:29:59:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('8','321321321','2012-05-09 18:29:59:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('2','987654321','2012-02-09 19:17:00:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('12','987654321','2012-02-09 19:17:00:000', 'Betalt');
Insert FlyBooking (AfgangID,PasNummer, BookingDatoTid, BookingStatus)
Values ('18','111111111','2012-04-03 09:30:00:000', 'Betalt');
og tabellen LedigtFlysæde:
use Northwind
go
Create Table FlySædeStatus(
FlySædeID int identity (1, 1) Primary KEY
,FlyID int not null
references FlyType
on delete no action
on update Cascade
,AfgangID int not null
references FlyAfgang
On Delete no action
On Update no action
,PasNummer int Null
references FlyPassager
on Delete no Action
on Update Cascade
,FlySædeRække int not null
,FlySædeBogstav nvarchar (50) not null
,FlySædeStatus nvarchar (50) not null
check(FlySædeStatus ='Ledigt' or FlySædeStatus='Optaget')
);
insert FlySædeStatus (FlyID, AfgangID, PasNummer, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','1','111111111','1','A','Optaget');
insert FlySædeStatus (FlyID, AfgangID, PasNummer, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','1','123123123','1','B','Optaget');
insert FlySædeStatus (FlyID, AfgangID, PasNummer, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','1','321321321','1','C','Optaget');
insert FlySædeStatus (FlyID, AfgangID, PasNummer, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','2','123456789','1','A','Optaget');
insert FlySædeStatus (FlyID, AfgangID, PasNummer, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','2','987654321','1','B','Optaget');
insert FlySædeStatus (FlyID, AfgangID, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','2','1','C','Ledigt');
insert FlySædeStatus (FlyID, AfgangID, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','3','1','A','Ledigt');
insert FlySædeStatus (FlyID, AfgangID, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','3','1','B','Ledigt');
insert FlySædeStatus (FlyID, AfgangID, FlySædeRække, FlySædeBogstav, FlySædeStatus)
Values ('1','3','1','C','Ledigt');
Stored procedure til undersøgelse af ledigt sæde:
Use Northwind
Go
create procedure sp_FlyTjekLedigtSæde
@AfgangFra nvarchar(5)
,@AFgangTil nvarchar(5)
,@AfgangDatoTid Datetime
as
Select FlySædeID
From FlySædeStatus
join FlyAfgang
on FlyAfgang.AfgangID = FlySædeStatus.AfgangID
Where AfgangFra = @AfgangFra and AfgangTil = @AfgangTil and @AfgangDatoTid = AfgangDatoTid and FlySædeStatus = 'Ledigt';
C#
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;
namespace TjekLedigtFlysæde
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string AfgangFra = "";
AfgangFra = tAfgangFra.Text;
string AfgangTil = "";
AfgangTil = tAfgangTil.Text;
string AfgangDatoTid = "";
AfgangDatoTid = tAfgangDatoTid.Text;
string AfgangID = "";
AfgangID = tAfgangID.Text;
string Pasnummer = "";
Pasnummer = tPasNummer.Text;
string BookingDatoTid = "2012-05-02 09:00:00.000";
string BookingStatus = "";
BookingStatus = tBilletStatus.Text;
switch (TjekLedigtSæde(AfgangFra, AfgangTil, AfgangDatoTid))
{
case true:
string insert = string.Format("INSERT INTO FlyBooking (AfgangID, PasNummer, BookingDatoTid, BookingStatus) VALUES ('{0}', '{1}', '{2}' {3})", AfgangID, Pasnummer, BookingDatoTid, BookingStatus);
string status = updateDatabase(insert);
MessageBox.Show(status, "Status", MessageBoxButtons.OK);
break;
case false:
MessageBox.Show("Ingen ledige flysæder på denne afgang. Vælg anden flyafgang.", "Error",
MessageBoxButtons.OK);
break;
}
}
public static bool TjekLedigtSæde(string AfgangFra, string AfgangTil, string AfgangDatoTid)
{
using (SqlConnection conn = new SqlConnection(@"
data source = .\sqlexpress;
integrated security = true;
database = Northwind"))
{
SqlDataReader rdr = null;
try
{
string kk = "";
bool kkExist = false;
conn.Open();
SqlCommand cmd = new SqlCommand("sp_FlyTjekLedigtSæde", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@AfgangFra", AfgangFra));
cmd.Parameters.Add(new SqlParameter("@AfgangTil", AfgangTil));
cmd.Parameters.Add(new SqlParameter("@AfgangDatoTid", AfgangDatoTid));
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
kk = string.Format("{0}", rdr[0].ToString());
}
if (kk.Length > 0)
{
kkExist = true;
}
return kkExist;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK);
return false;
}
finally
{
conn.Close();
}
}
}
public static string updateDatabase(string statement)
{
using (SqlConnection conn = new SqlConnection(@"
data source = .\sqlexpress;
integrated security = true;
database = Northwind"))
{
try
{
conn.Open();
SqlTransaction sqltrans = conn.BeginTransaction();
SqlCommand sqlcmd = conn.CreateCommand();
sqlcmd.CommandText = statement;
sqlcmd.Transaction = sqltrans;
sqlcmd.ExecuteNonQuery();
sqltrans.Commit();
string returnvalue = "Database Updated";
return returnvalue;
}
catch (Exception ex)
{
return ex.Message;
}
finally
{
conn.Close();
}
}
}
}