C# SelectedIndex未插入正确的值
我有一种将用户信息插入SQL Server数据库的方法。我在pageload事件中填充了我的组合框。如果用户正在更新旧记录,则选择所需的输入并点击update;如果用户正在创建新记录,则点击insert。当他们这样做时,我的数据库没有存储正确的值,如果他们选择4,它将存储3。这是我的插入方法和填充方法 插入方法:我必须加入C# SelectedIndex未插入正确的值,c#,sql,sql-server,tsql,combobox,C#,Sql,Sql Server,Tsql,Combobox,我有一种将用户信息插入SQL Server数据库的方法。我在pageload事件中填充了我的组合框。如果用户正在更新旧记录,则选择所需的输入并点击update;如果用户正在创建新记录,则点击insert。当他们这样做时,我的数据库没有存储正确的值,如果他们选择4,它将存储3。这是我的插入方法和填充方法 插入方法:我必须加入StockID,因为它是主键 using (dbConn2 = new SqlConnection(Properties.Settings.Default["tville"].
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));
}
}
如果我还有什么遗漏,请告诉我。谢谢。第一个SelectedIndex是0,您的第一个ID是1,所以只需进行以下更改:
addNewFormat.Parameters.AddWithValue("@StockID", Convert.ToInt32(cmboBoxStock.SelectedIndex)+1);
第一个SelectedIndex为0,您的第一个ID为1,因此只需进行以下更改:
addNewFormat.Parameters.AddWithValue("@StockID", Convert.ToInt32(cmboBoxStock.SelectedIndex)+1);
INSERT语句有两个选项: (1)您可以使用
插入。。。值…
在这种情况下,您必须提供与要插入数据的列数量相同的值,并且必须只提供文字值或SQL Server变量-您不能使用选择来提供值:
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')
您可以使用选择将感兴趣的值存储到SQL Server变量中:
DECLARe @StockID INT
SELECT @StockID = ID
FROM dbo.LabelStockReference LSR
WHERE LSR.StockID = 4711
(2)如果无法提供所有文字值或变量,则必须使用插入。。。。选择…
选项,这要求您在SELECT
中提供INSERT
希望在目标表中插入行的列数:
DECLARE @ASqlServerVariable VARCHAR(100)
SET @ASqlServerVariable = 'any possible value that's legal for this datatype'
INSERT INTO dbo.YourTable(ID, Col1, Col2, Col3)
SELECT
42, 'Some fixed value', @ASqlServerVariable, aTableColumn
FROM
dbo.SomeOtherTable
有关所有可能选项等的详细信息和确切语法,请参见。INSERT语句有两个选项:
(1)您可以使用插入。。。值…
在这种情况下,您必须提供与要插入数据的列数量相同的值,并且必须只提供文字值或SQL Server变量-您不能使用选择来提供值:
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')
您可以使用选择将感兴趣的值存储到SQL Server变量中:
DECLARe @StockID INT
SELECT @StockID = ID
FROM dbo.LabelStockReference LSR
WHERE LSR.StockID = 4711
(2)如果无法提供所有文字值或变量,则必须使用插入。。。。选择…
选项,这要求您在SELECT
中提供INSERT
希望在目标表中插入行的列数:
DECLARE @ASqlServerVariable VARCHAR(100)
SET @ASqlServerVariable = 'any possible value that's legal for this datatype'
INSERT INTO dbo.YourTable(ID, Col1, Col2, Col3)
SELECT
42, 'Some fixed value', @ASqlServerVariable, aTableColumn
FROM
dbo.SomeOtherTable
有关所有可能选项等的详细信息和确切语法,请参阅。此处可能涉及SelectedIndex的代码在哪里?另外,请标记您使用的UI技术。@KingKing addNewFormat.Parameters.AddWithValue(“@StockID”,Convert.ToInt32(cmbobxstock.SelectedIndex));它就在dbconn2.open()的正上方;您不能混合使用INSERT。。值(..)
方法,在其VALUES()集合中选择。您可以使用VALUES()
并仅提供**文本值和SQL Server变量`或者必须使用INSERT。。。选择…
method从该表中进行选择(并可能提供其他文字值)@marc_s那么你是说所有值都是这样还是有静态值?我没有完全理解你的帖子。我在另一篇文章中发现,他们使用了我实现的工具。@marc_s如果你能详细说明一些代码以供参考,这将真正帮助我学习。这里可能涉及SelectedIndex的代码在哪里?另外,请标记您使用的UI技术。@KingKing addNewFormat.Parameters.AddWithValue(“@StockID”,Convert.ToInt32(cmbobxstock.SelectedIndex));它就在dbconn2.open()的正上方;您不能混合使用INSERT。。值(..)
方法,在其VALUES()集合中选择。您可以使用VALUES()
并仅提供**文本值和SQL Server变量`或者必须使用INSERT。。。选择…
method从该表中进行选择(并可能提供其他文字值)@marc_s那么你是说所有值都是这样还是有静态值?我没有完全理解你的帖子。我在另一篇文章中发现,他们使用了我实现的东西。@marc_如果你能详细说明一些代码以供参考,这将真正帮助我学习。这很有效!谢谢,但是它被设置为默认值0。为什么不将第一个值作为0点读取?如果需要该值,请使用SelectedValue属性。但是如果您想要选定的索引,请使用SelectedIndex属性,并记住第一个索引是0。因此,在我的情况下,我的组合框中包含的值将顶部记录视为0到7。因此,当我选择标签2时,我的索引返回1。这就是为什么价值需要增加1。这是有效的!谢谢,但是它被设置为默认值0。为什么不将第一个值作为0点读取?如果需要该值,请使用SelectedValue属性。但是如果您想要选定的索引,请使用SelectedIndex属性,并记住第一个索引是0。因此,在我的情况下,我的组合框中包含的值将顶部记录视为0到7。因此,当我选择标签2时,我的索引返回1。这就是为什么价值需要增加1。