Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SelectedIndex未插入正确的值_C#_Sql_Sql Server_Tsql_Combobox - Fatal编程技术网

C# SelectedIndex未插入正确的值

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"].

我有一种将用户信息插入SQL Server数据库的方法。我在pageload事件中填充了我的组合框。如果用户正在更新旧记录,则选择所需的输入并点击update;如果用户正在创建新记录,则点击insert。当他们这样做时,我的数据库没有存储正确的值,如果他们选择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));
   }
}

如果我还有什么遗漏,请告诉我。谢谢。

第一个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。