Vincent Maverick Durano
Как уже заметили некоторые участники, ваш код плох, а логика запутана. Во-первых, вы должны НЕ добавьте значения вашего TextBox
к вашему SQL-оператору, поскольку он потенциально может привести вас к SQL Injection
атака. Вот статья, которую я написал некоторое время назад, чтобы продемонстрировать, насколько это опасно: [^]
Во-вторых, не нужно жестко кодировать строку подключения и вставлять ее в код C#. Connection String
должен быть помещен в ваш файл web.config под элементом connectionStrings: Создание строки подключения и работа с SQL Server LocalDB | Microsoft Docs[^]
Например:
<connectionStrings>
<add name="MyDBConnectionString" connectionString="Data Source=HOME-PC\\SQLEXPRESS;Initial Catalog=NoveltySystem;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Затем вы можете ссылаться на значение строки подключения с помощью
ConfigurationManager
класс вроде этого:
string dbConnectionString = ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;
В-третьих, не инициализируйте свой
SqlConnection
в
Page_Load
событие, так как вы вставляете данные в
Button
'с
Click
событие.
В-четвертых, сделайте привычкой класть объекты, которые едят ресурсы, такие как
SqlConnection
,
SqlCommand
внутри блока использования, чтобы гарантировать, что объекты будут правильно утилизированы и после того, как они будут использованы.
Наконец, я бы рекомендовал вам отделить свой код/логику для вставки данных в базу данных и держать их подальше от вашего события нажатия кнопки для удобства обслуживания и разделения проблем.
Ваш код теперь будет выглядеть примерно так:
private void InsertRecord(string name, string language, string std, string author, string edition, string price, string stock){
string dbConnectionString = ConfigurationManager.ConnectionStrings["MyDBConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(dbConnectionString)) {
string sql = "INSERT INTO addBooks(BkName,BkLanguage,BkStd,BkAuthore,BkEditions,BkPrice,BkStocks) VALUES (@BookName,@BookLanguage,@BookStd,@BookAuthor,@BookEdition,@BookPrice,@BookStock)";
using (SqlCommand cmd = new SqlCommand(sql, connection)) {
connection.Open();
cmd.Parameters.AddWithValue("@BookName", name);
cmd.Parameters.AddWithValue("@BookLanguage", language);
cmd.Parameters.AddWithValue("@BookStd", std);
cmd.Parameters.AddWithValue("@BookAuthor", author);
cmd.Parameters.AddWithValue("@BookEdition", edition);
cmd.Parameters.AddWithValue("@BookPrice", price);
cmd.Parameters.AddWithValue("@BookStock", stock);
cmd.ExecuteNonQuery();
}
}
}
protected void addB_Click(object sender, EventArgs e){
InsertRecord(bname.Text,blang.Text,bstd.Text,bauthore.Text,bedition.Text, bprice.Text,bstocks);
}
Примечание: возможно, потребуется дважды проверить
datatype
вы использовали в своем
SQL
Database
поскольку мы передаем все параметры как
string
datatype
в этом примере. Например, если
BkPrice
и
BkStocks
столбцы в вашей базе данных-это
decimal
и
integer
, то вам нужно изменить свой код C#
datatype
также.
Надеюсь, это поможет!