参数@code1没有默认值

Parameter @code1 has no default value

我正在创建此代码以使用两个组合框,其中一个取决于第一个,但是当我尝试 select "code_Zone" 来自 Table "Zone" 我有这个例外:

Parameter @code1 has no default value

这是我的代码:

Dim cmd3 = New OleDbCommand("select [Code_Zone] from [Zone] where [Nom_Zone]= '@code';", connection)
cmd3.Parameters.AddWithValue("@code", ComboBoxNomZoneDeclaration.SelectedText.ToString)
Dim valeur = cmd3.ExecuteScalar
Dim commande = New OleDbCommand("select [Code_Cable] from [CableEnFibre] where [Code_Zone]=@code1;", connection)
commande.Parameters.AddWithValue("@code1", valeur)
Dim reader = commande.ExecuteReader   'there is the exception 
While reader.Read
    ComboBoxPanneCentreAppel.Items.Add(reader.GetInt32(reader.GetOrdinal("Code_Cable")))
End While
reader.Close()

第一个问题是 @code 参数占位符周围的引号。通过这种方式,占位符被视为文字字符串。现在,当您执行 cmd3 命令时,数据库引擎会在列 Nom_Zone 中搜索字符串 "@code",当然什么也找不到。所以变量 valeur 的值什么也不是。 无论组合框中选定的文本是什么,都将被忽略。

现在是第二个问题。正如您可以 read in MSDN about SelectedText 如果您想在组合没有焦点时检索当前 SelectedItem 的内容,那么这个 属性 不是正确的选择

...you should be aware that the selection can change automatically because of user interaction. For example, if you retrieve the SelectedText value in a button Click event handler, the value will be an empty string. This is because the selection is automatically cleared when the input focus moves from the combo box to the button.

因此,您应该使用 SelectedItem 属性 或 SelectedValue,具体取决于您填充 ComboBox 的方式。请使用调试器在您尝试读取组合值的位置设置断点,并在该位置检查您的属性值