Несмотря на то, что я был преследователем здесь целую вечность, это первое сообщение, которое я делаю. Надеюсь, на этом все не закончится, и более оптимистично будущие посты могут быть на самом деле мной, пытающимся протянуть руку кому-то еще, я действительно обязан этому сообществу очень много.
Теперь то, что я пытаюсь сделать, просто, и, скорее всего, причина того, что это не работает, - моя собственная глупость. Однако я в тупике.
Я работаю над сайтом ASP.Net, который взаимодействует с базой данных SQL Server 2008 R2. Пока все идет хорошо, но обновление строки (или более) просто не будет работать. Я даже пытался скопировать и вставить код с этого сайта и других сайтов, но это всегда одно и то же.
Вкратце: Не отображается исключение или ошибки при выполнении команды обновления (она даже дает правильное количество затронутых строк), но в базе данных фактически не вносятся изменения.
Вот упрощенная версия моего кода (в оригинале было больше команд и множество параметров, но даже если это так, он не работает):
protected void btSubmit_Click(object sender, EventArgs e)
{
using (SqlConnection connection =
new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
{
string commandString = "UPDATE [impoundLotAlpha].[dbo].[Vehicle]" +
"SET [VehicleMake] = @VehicleMake" +
" WHERE [ComplaintID] = @ComplaintID";
using (SqlCommand command = new SqlCommand(commandString, connection))
{
SqlTransaction transaction = null;
try
{
command.Connection.Open();
transaction = connection.BeginTransaction(IsolationLevel.Serializable);
command.Transaction = transaction;
SqlParameter complaintID = new SqlParameter("@complaintID", SqlDbType.Int);
complaintID.Value = HttpContext.Current.Request.QueryString["complaintID"];
command.Parameters.Add(complaintID);
SqlParameter VehicleMake = new SqlParameter("@VehicleMake", SqlDbType.VarChar, 20);
VehicleMake.Value = tbVehicleMake.Text;
command.Parameters.Add(VehicleMake);
command.ExecuteNonQuery();
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
finally
{
connection.Close();
}
}
}
}
Я пробовал это с "SqlTransaction" и без него, и ничего не меняется.
Кроме того, поскольку я делаю несколько обновлений одновременно, я хочу, чтобы они действовали как одна транзакция. Я обнаружил, что это можно сделать либо так, либо используя классы, включенные в пространство имен System.Transactions (CommittableTransaction, TransactionScope ...).
Я перепробовал все, что смог найти, но не получил никаких других результатов.
Строка подключения в web.config выглядит следующим образом:
<connectionStrings>
<add name="ApplicationServices"
connectionString="Data Source=localhost;Initial Catalog=ImpoundLotAlpha;Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
Итак, тлдр; версия:
- Какую ошибку я совершил с этой попыткой обновления записи? (Разобрался, проверьте ниже, если у вас есть похожая проблема.)
- Каков наилучший способ собрать несколько команд обновления в одну транзакцию?
Заранее благодарим за любую помощь и / или предложения!
Edit:
Кажется, что мне не хватало сна вчера, потому что на этот раз мне понадобилось всего 5 минут, чтобы понять мою ошибку.
Видимо, обновление работало правильно, но я не заметил, что значения текстового поля перезаписывались в Page_Load. Я почему-то прокомментировал эту часть:
if (IsPostBack)
return;
Вторая часть вопроса остается в силе. Но я должен опубликовать это как ответ на свой собственный вопрос или оставить это так?