我有一种方法可以将用户信息插入SQL Server数据库。我在pageload事件中填充了我的组合框。用户选择他们想要的输入,如果他们正在更新旧记录,则点击更新,如果创建新记录则插入更新。当他们这样做时我的数据库没有存储正确的值,如果他们选择4存储3.这是我的插入方法和填充方法。
插入方法:我必须加入StockID
,因为它是主键。
using (dbConn2 = new SqlConnection(Properties.Settings.Default["tville"].ToString()))
{
SqlCommand addNewFormat = new SqlCommand(@"INSERT INTO PackLabelFormat ( PackFormatID, Description, PrintWeight, PrintPlantCode, PrintPrice, StockID) VALUES (@PackFormatID, @Description, @PrintWeight, @PrintPlantCode, @PrintPrice, (SELECT @StockID from LabelStockReference LSR WHERE LSR.StockID = @StockID))", dbConn2);
addNewFormat.Parameters.AddWithValue("@PackFormatID", Convert.ToInt32(IDselect));
addNewFormat.Parameters.AddWithValue("@Description", rTxtBoxDescription.Text);
addNewFormat.Parameters.AddWithValue("@PrintPrice", rChkBoxPrintPrice.Checked);
addNewFormat.Parameters.AddWithValue("@PrintWeight", rChkBoxWeight.Checked);
addNewFormat.Parameters.AddWithValue("@PrintPlantCode", rChkBoxPlantCode.Checked);
addNewFormat.Parameters.AddWithValue("@StockID", Convert.ToInt32(cmboBoxStock.SelectedIndex));
dbConn2.Open();
addNewFormat.ExecuteNonQuery();
填充方法:
if (labelList != null)
{
foreach (LabelData l in labelList)
{
cmboBoxStock.Items.Add(string.Format("{0} - {1}", l.PackFormatID, l.Description));
}
}
如果还有什么我要离开的,请告诉我。感谢。
答案 0 :(得分:1)
INSERT语句有两个选项:
(1)您可以使用INSERT ... VALUES ....
,在这种情况下,您必须提供与要插入数据的列一样多的值,并且您必须提供文字值或仅限SQL Server变量 - 您无法使用SELECT
提供值:
DECLARE @ASqlServerVariable VARCHAR(100)
SET @ASqlServerVariable = 'any possible value that's legal for this datatype'
INSERT INTO dbo.YourTable(ID, Col1, Col2, Col3)
VALUES (42, 'Some fixed value', @ASqlServerVariable, 'Another literal value')
可以做的是使用SELECT
将您感兴趣的值存储到SQL Server变量中:
DECLARe @StockID INT
SELECT @StockID = ID
FROM dbo.LabelStockReference LSR
WHERE LSR.StockID = 4711
(2)如果您无法提供所有文字值或变量,则必须使用INSERT .... SELECT ...
选项,这需要您在{{1}中提供尽可能多的列因为SELECT
期望在目标表中插入一行:
INSERT
有关所有可能选项等的所有详细信息和确切语法,请参阅official TechNet documentation for INSERT
。
答案 1 :(得分:0)
第一个SelectedIndex为0,您的第一个ID为1,所以只需进行此更改:
addNewFormat.Parameters.AddWithValue("@StockID", Convert.ToInt32(cmboBoxStock.SelectedIndex)+1);