Лапина 23Б отчет
.pdfDemand_ID = @Demand_ID,
Model_ID =@Model_ID ,
Type_ID = @Type_ID,
Filial_ID = @Filial_ID,
AVTO_Engine = @AVTO_Engine,
AVTO_Body = @AVTO_Body,
AVTO_Volume = @AVTO_Volume,
AVTO_Power = @AVTO_Power,
AVTO_Helm = @AVTO_Helm,
AVTO_Drive = @AVTO_Drive,
AVTO_Cost = @AVTO_Cost,
AVTO_New = @AVTO_New,
AVTO_Year = @AVTO_Year,
AVTO_Distans = @AVTO_Distans
where AVTO_ID = @AVTO_ID END
4.ALTER PROCEDURE [dbo].[SPU_AVTO_SEL]
AS BEGIN select AVTO_ID,
AVTO_Engine, AVTO_Body, AVTO_Volume, AVTO_Power, AVTO_Helm, AVTO_Drive, AVTO_Cost, AVTO_New, AVTO_Year, AVTO_Distans, AVTO_Cost, Type.Type_ID, Type.Type_Type, Model.Model_ID, Model.Model_Model, Filial.Filial_ID, Filial.SFilial_ID, SFilial.SFilial_Name
from AVTO
inner join Type on Type.Type_ID = AVTO.Type_ID inner join Model on Model.Model_ID = AVTO.Model_ID
inner join Filial on Filial.Filial_ID = AVTO.Filial_ID inner join SFilial on SFilial.SFilial_ID = Filial.SFilial_ID END
По аналогии составляться хранимые на оставшиеся таблицы: Client, Demand, Filial.
Хранимые процедурына таблицу-справочник
За пример возьмем один из наших справочников например Filial
1. ALTER PROCEDURE [dbo].[SPU_FILIAL_ADD]
@Street_ID int, @Chief_ID int, @SFilial_ID int, @Filial_INN int, @Filial_Phone int, @Filial_Capesiti int
AS
BEGIN
INSERT INTO Filial (Street_ID,Chief_ID,SFilial_ID,Filial_INN,Filial_Phone,Filial_Capesiti) VALUES (@Street_ID,@Chief_ID,@SFilial_ID,@Filial_INN,@Filial_Phone,@Filial_Capesiti) END
2.ALTER PROCEDURE [dbo].[SPU_FILIAL_DEL] @Filial_ID int
AS BEGIN
delete Filial where
Filial_ID = @Filial_ID END
3.ALTER PROCEDURE [dbo].[SPU_FILIAL_EDIT] @Filial_ID int,
@Street_ID int, @Chief_ID int, @SFilial_ID int, @Filial_INN int, @Filial_Phone int, @Filial_Capesiti int
as BEGIN
UPDATE Filial SET Street_ID = @Street_ID, Chief_ID = @Chief_ID, SFilial_ID = @SFilial_ID, Filial_INN = @Filial_INN,
Filial_Phone = @Filial_Phone, Filial_Capesiti = @Filial_Capesiti
where Filial_ID = @Filial_ID END
4.ALTER PROCEDURE [dbo].[SPU_FILIAL_SEL] AS
BEGIN
select * from Filial END
Так же составляем хранимые процедуры на все оставшиеся справочники : Chief, District, Model, SFilial, Sign, Street, Type.
Хранимые процедуры на таблицыадминистрирования
Таблица логинов
1. ALTER PROCEDURE [dbo].[SPU_LOGIN_ADD]
@Login_Login varchar(50), @Password_Password varchar(50), @Post_Name varchar(50), @Post_ID bigint
AS
BEGIN
INSERT INTO Login
(Login_Login,Post_ID) VALUES (@Login_Login, @Post_ID)
INSERT INTO Password
(Password_Password, Login_ID) VALUES (@Password_Password, SCOPE_IDENTITY())
END
2. ALTER PROCEDURE[dbo].[SPU_LOGIN_DEL]
@Login_Id bigint AS
BEGIN
DELETE FROM Login
where Login.Login_ID = @Login_id
END
3. ALTER PROCEDURE [dbo].[SPU_LOGIN_EDIT]
@Login_Login varchar(100), @Login_Id bigint, @Password_ID bigint,
@Password_Password varchar(50), @Post_Name varchar(50), @Post_ID bigint
AS BEGIN
UPDATE Login set Login_Login = @Login_Login, Post_ID = @Post_ID
where Login_ID= @Login_Id
UPDATE Password set
Password_Password = @Password_Password where
Password_ID = @Password_ID END
4. ALTER PROCEDURE [dbo].[SPU_LOGIN_SEL]
@Login_ID bigint = null, @Login_Login varchar (50)= null, @Password_Password varchar (50)= null
AS
BEGIN
Select * from Login
inner join Password on Password.Login_ID = Login.Login_ID inner join Post on Post.Post_ID = Login.Post_ID
where (@Login_ID is null or Login.Login_ID = @Login_ID)
and (@Password_Password is null or Password.Password_Password = @Password_Password)
and (@Login_Login is null or Login.Login_Login= @Login_Login)
END
Таблица должносей
1. ALTER PROCEDURE [dbo].[SPU_POST_ADD]
@Post_Name varchar(50), @Post_Access1 bit, @Post_Access2 bit, @Post_Access3 bit
AS
BEGIN
Insert into Post (Post_Name, Post_Access1 , Post_Access2 , Post_Access3)
Values
(@Post_Name, @Post_Access1 , @Post_Access2 , @Post_Access3)
END
2. ALTER PROCEDURE [dbo].[SPU_POST_DEL]
@Post_ID bigint = null
AS
BEGIN
Delete Post
wherePost_ID = @Post_ID
END
3. ALTER PROCEDURE [dbo].[SPU_POST_EDIT] @Post_ID bigint,
@Post_Name varchar(50), @Post_Access1 bit, @Post_Access2 bit, @Post_Access3 bit
AS BEGIN
Update Post set Post_Name=@Post_Name where Post_ID=@Post_ID
Update Post set Post_Access1=@Post_Access1 where
Post_ID=@Post_ID
Update Post set Post_Access2=@Post_Access2 where
Post_ID=@Post_ID
Update Post set Post_Access3=@Post_Access3 where
Post_ID=@Post_ID
END
4. ALTER PROCEDURE [dbo].[SPU_POST_SEL]
@Post_ID bigint = null AS
BEGIN
Select * from Post
END
Хранимая процедура SELECTEDPARAM
Служит для получения параметров по имени процедуры, чтобы в клиентской программе организовать универсальный метод для передачи имени процедуры, которую необходимо выполнить и получения данных из форм в БД.
ALTER PROCEDURE [dbo].[SELECTEDPARAM]
@storedProcedureName varchar(100)
AS BEGIN
select PARAMETER_NAME from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME = @storedProcedureName
END
Хранимая процедура на организацию поиска
ALTER PROCEDURE [dbo].[SPU_CLIENT_SEARCH]
@Femeli varchar(50) AS
BEGIN
SELECT Client_ID,Client_Femeli,Client_Name,Client_Second,Client_Sing,Client_Account, Client_Price
FROM Client
where Client_Femeli like @Femeli+'%' END
Реализация клиентской части БД (СУБД)
Клиентская часть СУБД исполняется на компьютере пользователя и обеспечивает интерфейс пользователя с базой данных, а именно: преобразует запросы пользователя в команды запросов к серверной части, а при получении результатов выполняет преобразование и отображение информации. Клиентской программой может быть любая программа, имеющая интерфейс с серверной программой или СУБД.
Разработка нашего проекта проходит в среде разработки Microsoft Visual Studio 2010 на языке программирования C#.
Сначала мы создаем контролы которые в дальнейшем облегчат нашу задачу в разработку проекта.
Контрол ButtonAccess: предназначен для создания кнопок с разграничением прав доступа.
public class ButtonAccess : Button
{
public enum Type {None, Add, Edit, Del }; [Category("DataBase")]
public Type AccessName
{
get; set;
}
}
Контрол CheckBoxDB: предназначен для булевских полей true и false.
public class CheckBoxDB : CheckBox,InterfaceDB
{
[Category("DataBase")] public string DisplayValues
{
get;set;
}
public void GetValue(System.Data.DataRow row)
{
if (!String.IsNullOrEmpty(row[DisplayValues].ToString() ))
{
this.Checked = (bool)row[DisplayValues];
}
}
public void SetValue(System.Data.DataRow row)
{
row[DisplayValues] = this.Checked;
}
public bool CorrectFilling()
{
return true
}
}
Контрол ComboBoxDB: предназначен для выбора значений из списка(справочников)
public class ComboBoxDB : System.Windows.Forms.ComboBox, InterfaceDB
{
DataTable _container = new DataTable(); [Category("DataBase")]
public string TableName { get; set; }
public List<SqlParameter> Filter = new List<SqlParameter>(); public void SelectData()
{
_container.Clear();
SqlCommand _cmd = new SqlCommand(); if (!string.IsNullOrEmpty(TableName))
{
_cmd.CommandText = "SPU_" + TableName + "_SEL"; _cmd.CommandType = System.Data.CommandType.StoredProcedure; _cmd.Connection = SQLConnect.GetConnect();
foreach (SqlParameter param in Filter)
{
_cmd.Parameters.Add(param);
}
_container = SQLCommandor.SelectData(_cmd);
}
RefreshData();
}
private void RefreshData()
{
if (!string.IsNullOrEmpty(DisplayValues))
{
try
{
foreach (DataRow row in _container.Rows)
{
this.Items.Add(row[DisplayValues].ToString());
}
}
catch (Exception Error)
{
MessageBox.Show(Error.Message);
}
}
else
{
MessageBox.Show("Введите название столбца");
}
}
public string SelectedId()
{
if (this.SelectedIndex >= 0)
{
int a = 0;
foreach (DataRow row in _container.Rows)
{
if (a == this.SelectedIndex)
{
return row[TableName + "_Id"].ToString();
}
a++;
}
return string.Empty;
}
else
{
MessageBox.Show("Выберите поле!!"); return string.Empty;
}
}
[Category("DataBase")] public string DisplayValues
{
get; set;
}
///<summary>
///Заполнение данных из строки редактирования
///</summary>
///<param name="row"> строка редактирования </param> public void GetValue(DataRow row)
{
//var aa =row[TableName + "_Id"]; SelectData();
if (String.IsNullOrEmpty(row[TableName + "_Id"].ToString()))
{ } else
{
int i = 0;
foreach (DataRow _row in _container.Rows)
{
if (row[TableName + "_Id"].ToString() == _row[TableName + "_Id"].ToString())
{
break;
}
i++;
}
this.SelectedIndex = i;
}
}
public void SetValue(DataRow row)
{
row[TableName + "_Id"] = SelectedId();
}
public bool CorrectFilling()
{
if (this.SelectedIndex >= 0)
{
return true;
}
else
{
return false;
}
}
}
Контрол DateTimePickerDB: предназначен для выставления числа и даты.
public class DateTimePickerDB : DateTimePicker,InterfaceDB
{
public string DisplayValues
{
get; set;
}
public void GetValue(System.Data.DataRow row)
{
string tmp = row[DisplayValues].ToString(); if (!String.IsNullOrEmpty(tmp))
{
this.Value = (DateTime)row[DisplayValues];
}
else
{
this.Value = DateTime.Now;
}
}
public void SetValue(System.Data.DataRow row)
{
row[DisplayValues] = this.Value;
}
public bool CorrectFilling()
{
if (this.Value != null)
{
return true;
}
else
{
return false;
}
}
}
Контрол ListBoxDB: предназначен для отображения записей из таблиц
public class ListBoxDB : ListBox
{
DataTable _container = new DataTable(); [Category("DataBase")]
public string TableName { get; set; } [Category("DataBase")]
public string DisplayValues
{
get; set;
}
public List<SqlParameter> Filter = new List<SqlParameter>(); public void SelectData()
{
SqlCommand _cmd = new SqlCommand(); if (!string.IsNullOrEmpty(TableName))
{
_cmd.CommandText = "SPU_" + TableName + "_SEL"; _cmd.CommandType = System.Data.CommandType.StoredProcedure; _cmd.Connection = SQLConnect.GetConnect();
foreach (SqlParameter param in Filter)
{
_cmd.Parameters.Add(param);
}
_container = SQLCommandor.SelectData(_cmd);
}
RefreshData();
}
private void RefreshData()
{
if (!string.IsNullOrEmpty(DisplayValues))
{
this.Items.Clear(); try
{
foreach (DataRow row in _container.Rows)
{
this.Items.Add(row[DisplayValues].ToString());
}
}
catch (Exception Error)
{
MessageBox.Show(Error.Message);
}
}
else
{
MessageBox.Show("Введите название столбца");
}
}
public string SelectedId()
{
if (this.SelectedIndex >= 0)
{
int a = 0;
foreach (DataRow row in _container.Rows)
{
if (a == this.SelectedIndex)
{
return row[TableName + "_Id"].ToString();
}
a++;
}
return string.Empty;
}
else
{
MessageBox.Show("Выберите поле!!"); return string.Empty;
}
}
public DataRow EditingRow()
{
if (this.SelectedIndex >= 0)
{
int a = 0;
foreach (DataRow row in _container.Rows)
{
if (a == this.SelectedIndex)
{
return row;
}
a++;
}
return null;
}
else
{
//MessageBox.Show("Выберите поле!!"); return null;
}
}
public DataRow NewRow()
{
return _container.NewRow();
}
}
Контрол TextBoxDB: предназначен для ввода значения в столбец
public class TextBoxDB : System.Windows.Forms.TextBox, InterfaceDB { #region Реализация интерфейса InerfaceDB
[Category("DataBase")]
[Description("Имя столбца, значение которого надо выводить")] public string DisplayValues
{
get; set;
}
///<summary>
///Получает значение из столбца и записывает в поле, указанное в DisplayValues
///</summary>
///<param name="row">строка редактирования</param>
public void GetValue(DataRow row)
{
if (row[DisplayValues] != null)
{