Я пробовал метод, который принимает имя столбца и значение, которое я хочу обновить в базовом тестовом БД, и я не могу получить и результаты, используя SqlParameters?Когда я жестко кодирую запрос, я вижу, что таблица базы данных обновлена?
Замечательно понять, что я делаю неправильно со следующим запросом:
public bool UpdateTestDataTable(string TID, string ColumnName, string ColumnValue)
{
try
{
if (!string.IsNullOrEmpty(TID))
{
using (var db = new TestDBContext())
{
var rId = db.TempDb.SingleOrDefault(p => p.TID == TID);
string s_q_el = @"UPDATE dbo.TempDb
SET @Column = @NewValue
WHERE TID = @TID
AND id = @DbId;";
//This Works
//string sql2 = @"UPDATE dbo.TempDb
// SET TestData1 = 'TestingABC'
// WHERE TID = '66A46552E9A0B912457CE804A54CE1AF'
// AND id = @DbId;";
var col = new SqlParameter("@Column", SqlDbType.NVarChar)
{
Value = ColumnName
};
var nval = new SqlParameter("@NewValue", SqlDbType.NVarChar)
{
Value = ColumnValue
};
var paid = new SqlParameter("@PAID", SqlDbType.NVarChar)
{
Value = TID
};
var id = new SqlParameter("@DbId", SqlDbType.Int)
{
Value = rId.Id
};
db.Database.ExecuteSqlCommand(s_q_el, parameters: new[] { col, nval, paid, id});
//db.Database.ExecuteSqlCommand(sql2);
db.SaveChanges();
return true;
}
}
else
{
return false;
}
}
catch(Exception UADT_EX)
{
Console.WriteLine($"Error: {UADT_EX.message}");
return false;
}
}
Вызов с этим:
UpdateTestDataTable("66A46552E9A0B912457CE804A54CE1AF", "TestData1","BLAHBLAH123");
Я тестировал довольно много способов, но подумал, что я здесь упускаю очевидное?Причина такого подхода в том, что я хотел бы, чтобы одна функция обновляла различные данные столбцов в тестовом приложении.
Большое спасибо
РЕДАКТИРОВАТЬ
Iобновил запрос, основываясь на полученных комментариях, но будет ли это плохой практикой?
string s_q_el = $"UPDATE dbo.TempDb SET {ColumnName}= @NewValue WHERE TID = @TID AND id = @DbId;";
Поскольку теперь это дает правильный результат