如果c#中不存在,如何替换



我在.NET Core 3.1中有一个API,它将一些数据插入到我的数据库中,问题是我必须在插入数据的列中添加一个新列,因为随后调用了API。我将动态连接到应该插入的数据库,如果该列不存在,我如何创建一个可变表,然后插入新项?

这是我插入东西的方法:

public static IActionResult InsertOrder(string piva, string idNegozio, RiepilogoTakeaway ordine, HttpResponse Response) {
string connectionString = getConnectionString(piva);
var query_ordine = @"INSERT INTO `ordini` (`TIPO_OR`, `TAVOLO_OR`, `ORA_OR`, `SENT_OR`, `ID_OR_CFG`, `LOTTERIA_OR`) VALUES (@tipo, @tavolo, NOW(), 0, @id, @lotteria); SELECT LAST_INSERT_ID();";
using var connection = new MySqlConnection(connectionString);
using var cmd = new MySqlCommand(query_ordine, connection);
cmd.Parameters.AddWithValue("@tipo", "STB");
cmd.Parameters.AddWithValue("@tavolo", 0);
cmd.Parameters.AddWithValue("@id", idNegozio);
cmd.Parameters.AddWithValue("@lotteria", ordine.lotteria);
connection.Open();
cmd.Prepare();
string idOrdine = cmd.ExecuteScalar().ToString();
...
}

这就是我应该执行的另一个表:

ALTER TABLE `ordini`
ADD COLUMN `LOTTERIA_OT` VARCHAR(10) NULL AFTER `ID_OR_CFG`;

哪种方法最好?

在调用SQL更改之前尝试部署它。很可能您需要在数据库中拥有更高级别的权限才能运行alter或add列,例如,如果用于插入订单的SQL用户没有更改数据库架构的权限。但是,如果这仍然是一个选项,则需要执行SQL模式changeusing命令。ExecuteNonQuery((。可能值得创造一种新的方法";PrepareSqlTable";这样您就可以在查询运行之前调用。请记住,这将影响您的应用程序性能/可扩展性,因为现在我们将对每个查询进行检查。另一种选择是,通过查看错误消息并相应地创建它来在catch中处理此问题(与前面的选项相比,提供了更多的性能优势(。

最新更新