В настоящее время я работаю над проектом для колледжа по написанию программы для хранения информации о других компаниях, с которыми они взаимодействуют (например, контактная информация, информация о доставке и т. Д.), И о том, что находится в их общем запасе в любой момент времени (например,Марка, модель, количество товара на складе, информация о производителе / поставщике и т. Д.) И информация о клиенте.
Мне интересно, нужно ли использовать огромное количество хранимых процедур, чтобы использовать преимущества обработки ошибок и транзакций с использованиемT-SQL, или было бы быстрее просто использовать класс System.Data.SqlClient.SqlCommand
для выполнения простых запросов?У меня есть пример кода, который я разработал для хранения информации о клиенте в базе данных с использованием T-SQL и C #, что не было проблемой.Наша задача гласит, что о нас будут судить по сложности и эффективности нашей программы.
Это хранимая процедура, которую я использовал:
CREATE PROCEDURE uspAddCustomers @Name varchar(30), @Surname varchar(30), @Addressline1 varchar(300),@Addressline2 varchar(300),@Telephone varchar(12),@CellPhone varchar(12),@Email Varchar(100)
AS
BEGIN TRY
BEGIN TRANSACTION TrnAddCustomer;
INSERT INTO [TCTdb].[dbo].[Customers]
([Name]
,[Surname]
,[Addressline1]
,[Addressline2]
,[Telephone]
,[Cellphone]
,[Email])
VALUES
(@Name
,@Surname
,@Addressline1
,@Addressline2
,@Telephone
,@CellPhone
,@Email)
COMMIT TRANSACTION TrnAddCustomer;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION TrnAddCustomer;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage,
@ErrorSeverity,
@ErrorState
);
END CATCH
GO
Это фрагменты кода, которые я использовал для вызова хранимой процедуры:
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
SQLCommands comm = new SQLCommands(); //Custom Class containing method below.
comm.AddCustomer(tbName.Text, tbSurname.Text, tbAddressline1.Text, tbAddressline2.Text, tbPhoneNumber.Text, tbCellphoneNumber.Text, tbEmail.Text);
MessageBox.Show("Success! Note, if the data you inserted was too long, it may have been subjected to truncation to fit in the Database.", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
tbName.Text = tbSurname.Text = tbPhoneNumber.Text = tbCellphoneNumber.Text = tbAddressline2.Text = tbAddressline1.Text = tbEmail.Text = string.Empty;
}
catch
{
MessageBox.Show("It appears something has gone wrong. Please contact the Supervisor if this problem keeps reoccurring", "Unknown Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
}
AND
public void AddCustomer(params string[] parameters)
{
try
{
comm = new SqlCommand("UspAddCustomers", conn); // Stored Procedure
comm.Parameters.AddWithValue("@Name", parameters[0]);
comm.Parameters.AddWithValue("@Surname", parameters[1]);
comm.Parameters.AddWithValue("@Addressline1", parameters[2]);
comm.Parameters.AddWithValue("@Addressline2", parameters[3]);
comm.Parameters.AddWithValue("@Telephone", parameters[4]);
comm.Parameters.AddWithValue("@CellPhone", parameters[5]);
comm.Parameters.AddWithValue("@Email", parameters[6]);
comm.CommandType = CommandType.StoredProcedure;
comm.ExecuteNonQuery();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
}
}
Вопрос: Итак, чтобы пересмотреть мой вопрос, я собирался использовать этот тип кода для обработки всего CRUD для моих таблиц в моей базе данных.Я обеспокоен тем, что это может повлиять на производительность моей программы, потому что там задействовано много таблиц.Желательно ли продолжать так или я должен рассмотреть возможность использования более простых методов для манипулирования данными в моей базе данных?
Причина, по которой я подумал об использовании этого метода, заключалась в том, чтобы повысить сложность