关于从文本框中输入的文本添加到数据库的问题

本文关键字:文本 添加 数据库 问题 输入 | 更新日期: 2023-09-27 17:58:53

我有一个应用程序,它在数据网格中显示sql数据库中的数据。我正在添加一个功能,允许用户向这个数据网格添加一个新项目。我将在应用程序中有一个"添加"按钮,单击该按钮后,将打开一个新窗口,在其中添加所有信息。在用户将信息输入到文本框中并单击保存后,该信息将被保存到数据库中。这将需要将数据插入两个相关的独立表中。第一个表是ItemDescriptor,另一个表是Accessories。ItemDescriptor的id必须作为ItemDescriptorID放入Accessories表中。我试着做了两个单独的插入查询,但无法用程序将id从ItemDescriptor中获取到Accessories表中。对不起,我知道这可能有点令人困惑。如果需要更多信息,请告诉我。感谢

_dbAccess.ExecuteNonQuery("INSERT INTO ItemDescriptor (id, Model, Brand, DeviceName, Type, Notes) VALUES ('" + System.Guid.NewGuid() + "', '" + tbModel.Text + "', '" + tbBrand.Text + "', '" + tbDeviceName.Text + '", '" + cmbType.SelectedValue + "', '" + tbNotes.Text + "')");
_dbAccess.ExecuteNonQuery("INSERT INTO Accessories (id, ItemDescriptorID, StorageRoomCount, OnHandCount, HiBayCount) VALUES ('" + System.Guid.NewGuid() + "', '" +  

就我而言。。。不确定如何从第一个查询中获取ItemDescriptorID。

关于从文本框中输入的文本添加到数据库的问题

首先,在处理用户提供的输入时,请使用参数化查询。这种字符串串联的东西只是要求SQL注入攻击。

其次,如果使用SQL Server,则可以使用类似@@IDENTITY的方法在插入后获取标识字段。所有系统都有可比性,所以如果你让我们知道你在使用什么,我们可以为你指明正确的方向。

我假设您使用的是SQL Server,ItemDescriptor.id是一个标识列;对的

如果在初始插入语句后立即执行以下命令,它将返回最近生成的标识的值:

var newID = _dbAccess.ExecuteScalar("SELECT Scope_Identity()");

您可以使用newID来构造第二个insert语句。

需要注意的是:SELECT Scope_Identity()语句必须在与初始插入语句相同的连接实例上执行。因此,请确保您不会关闭和重新打开语句之间的连接。如果这似乎是一个问题,您实际上可以将insert和select语句组合成一个命令;例如:

var newID = _dbAccess.ExecuteScalar("INSERT [all your code here]; SELECT Scope_Identity();");

祝你好运!

查看此网站以获取最近添加的记录的标识

我找到了一种让它工作的方法。我只是把guid作为一个对象,然后把它用作一个变量,这就成功了。谢谢你的建议。

Guid guid = System.Guid.NewGuid();
if (_dbaccess != null)
{
_dbAccess.ExecuteNonQuery("INSERT INTO ItemDescriptor (id, Model, Brand, DeviceName, Type, Notes) VALUES ('" + guid + "', '" + tbModel.Text + "', '" + tbBrand.Text + "', '" + tbDeviceName.Text + '", '" + cmbType.SelectedValue + "', '" + tbNotes.Text + "')");
_dbAccess.ExecuteNonQuery("INSERT INTO Accessories (id, ItemDescriptorID, StorageRoomCount, OnHandCount, HiBayCount) VALUES ('" + System.Guid.NewGuid() + "', '" + guid + "', '" + tbStorageRoom.Text + "', '" + tbOnHand.Text + "', '" + tbHiBay.Text + "')"); 
}