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

时间:2011-06-08 16:44:55

标签: c# sql

我有一个应用程序,它在数据网格中显示来自sql数据库的数据。我正在添加一个允许用户向此数据网格添加新项目的功能。我将在应用程序中添加一个“添加”按钮,单击该按钮将打开一个新窗口,其中将添加所有信息。用户将信息输入文本框并单击“保存”后,该信息将保存到数据库中。这将需要将数据插入两个相关的单独表中。第一个表是ItemDescriptor,另一个表是附件。 ItemDescriptor的id必须作为ItemDescriptorID放入Accessories表中。我试图做两个单独的插入查询,但无法弄清楚如何以编程方式将ItemDescriptor中的id添加到附件表中。对不起,我知道这可能有点令人困惑。如果需要更多信息,请与我们联系。感谢

_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。

4 个答案:

答案 0 :(得分:2)

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

其次,如果您使用的是SQL Server,则可以使用@@IDENTITY之类的内容在插入后获取标识字段。所有系统都有类似的东西,所以如果你让我们知道你在使用什么,我们可以指出你正确的方向。

答案 1 :(得分:1)

我假设您使用的是SQL Server,而ItemDescriptor.id是一个标识列;正确的吗?

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

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

您可以使用newID构建第二个插入语句。

一个警告:SELECT Scope_Identity()语句必须在与初始insert语句相同的连接实例上执行。因此,请确保您没有关闭并重新打开语句之间的连接。如果这似乎是一个问题,您实际上可以将insert和select语句组合到一个命令中; e.g:

var newID = _dbAccess.ExecuteScalar("INSERT [all your code here]; SELECT Scope_Identity();");
祝你好运!

答案 2 :(得分:0)

答案 3 :(得分:0)

我想出了一种让它发挥作用的方法。我只是将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 + "')"); 
}