Параметризованный SQL в приложении C#
Я строю SQL-запрос, пытаясь сделать его более безопасным с помощью параметризованного запроса. У меня есть ниже, это выглядит нормально или есть что-то, что я могу / нужно изменить?
// Connection to SQL
string connectionString = "Data Source= PC\\SQL;Initial Catalog= Catalog;Integrated Security=False; User ID=; Password=";
// SQL Insert Command - Must Use The Below For Commands!
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand Insert = new SqlCommand("INSERT INTO database (OS) VALUES (@ad)", connection);
Insert.Parameters.AddWithValue("@ad", adtb.text);
connection.Open();
Insert.ExecuteNonQuery();
connection.Close();
Я пропустил некоторые детали (имя БД и т. Д.).
Любая помощь или предложения будут с благодарностью!
2 ответа
Вы должны сделать это так:
// Read this connection string from `Web.Config` file instead.
string connectionString = "Data Source= PC\\SQL;
Initial Catalog= Catalog;Integrated Security=False; User ID=; Password=";
Можно записать следующим образом, чтобы избежать повторной компиляции при каждом изменении строк подключения:
string connectionString = ConfigurationManager.ConnectionString["YourKey"]
.ConnectionString;
Рассмотреть возможность использования using
заявление, чтобы распоряжаться вашими ценными ресурсами:
using(SqlConnection connection = new SqlConnection(connectionString))
using(SqlCommand Insert = new SqlCommand("INSERT INTO database (OS)
VALUES (@ad)", connection))
{
Insert.Parameters.Add("@ad", SqlDbType.NVarchar,10).Value = adtb.text;
connection.Open();
Insert.ExecuteNonQuery();
}
Избегать использования AddWithValue
Прочитайте это.
Я сильно чувствую риск, чтобы ответить на ваш вопрос, но в любом случае..
Прежде всего, database
является зарезервированным ключевым словом в T-SQL. Вы должны использовать его с квадратными скобками, такими как [database]
, Но как лучший способ, не надо. Измените его на незарезервированное слово, которое имеет значение для вашего.
Во-вторых, использовать using
заявление, чтобы избавиться от SqlConnection
а также SqlCommand
вместо звонка .Dispose()
метод вручную..
В-третьих, не рекомендуется использовать AddWithValue
метод. Это может привести к неожиданным результатам. использование .Add()
метод или это перегрузки. Читайте: мы можем прекратить использовать AddWithValue()
уже?
using(SqlConnection con = new SqlConnection(connectionString))
using(SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "INSERT INTO [database] (OS) VALUES (@ad)";
cmd.Parameters.Add("@ad", SqlDbType.NVarChar, 16).Value = adtb.text;
con.Open();
cmd.ExecuteNonQuery();
}