必须声明标量变量。 [英] Scalar variable must be declared.
问题描述
我想从datagrid和datatable中删除一行。所以我编写了以下过程来完成。
现在我的错误是没有声明Scalar变量。我真的不知道如何解决这个问题
我尝试过的事情:
int selectedIndex = datagriduser.SelectedIndex;
DataRowView rowview = datagriduser.SelectedItem as DataRowView;
// string cltyp = rowview [ClientTyp]。ToString();
var cltyp = ;
var macadress = ;
var userkenn = ;
// OleDbCommand olecmd = new OleDbCommand(从AktiveUser删除WHERE User_Kennzeichen ='nh',conn) ;
string query = 从AktiveUser删除WHERE ClientTyp = @cltyp AND MAC_Adresse = @macadress AND User_Kennzeichen = @userkenn;
OleDbCommand olecmd = new OleDbCommand(query,conn);
// olecmd.ExecuteNonQuery();
// OleDbCommand olecmd = new OleDbCommand(从AktiveUser删除WHERE User_Kennzeichen ='nh',conn);
olecmd .Parameters.AddWithValue(@ cltyp,rowview [ ClientTyp]。ToString());
olecmd.Parameters.AddWithValue(@macadress,rowview [ Arbeitsplatz]。ToString( ));
olecmd.Parameters.AddWithValue(@userkenn,rowview [ Anmeldung]。ToString( ));
if (selectedIndex!= -1)
{
var deletedrow = dbtable.Rows [selectedIndex];
deletedrow.Delete();
oleda.DeleteCommand = olecmd;
oleda.Update(dbtable);
}
else
{
System.Windows.MessageBox.Show( 请选择要删除的行);
}
这里有两个错误;第一个是添加的参数需要在双引号内(如先前的答案所指出的那样)。
另一个是OleDB数据库提供者没有支持查询本身内的命名参数。
OleDbCommand.Parameters属性(System.Data.OleDb)| Microsoft Docs [ ^ ]
OleDB文档OLE DB。当CommandType设置为Text时,NET Provider不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。
尝试对您的问题进行这些更改< span class =code-keyword> string query = 从AktiveUser删除WHERE ClientTyp =?AND MAC_Adresse =?AND User_Kennzeichen =?;
OleDbCommand olecmd = new OleDbCommand(query,conn);
olecmd.Parameters.AddWithValue( @ cltyp,rowview [< span class =code-string> ClientTyp]。ToString());
olecmd.Parameters.AddWithValue( @ macadress,rowview [ Arbeitsplatz]。ToString());
olecmd.Parameters.AddWithValue( @ userkenn,rowview [ Anmeldung]。ToString());
你没有在@cltyp
和其他两个人周围加上引号,所以现在只是引用cltyp $ c $的值c>变量 - 这是一个空字符串。在
@cltyp
,@macadress
和@userkenn
周围加上报价
I want to delete a row from datagrid and datatable. So I wrote the following process to be done.
Now my error is that the Scalar variable is not declared. I literally don't know how to fix this
What I have tried:
int selectedIndex = datagriduser.SelectedIndex;
DataRowView rowview = datagriduser.SelectedItem as DataRowView;
// string cltyp = rowview["ClientTyp"].ToString();
var cltyp = "";
var macadress = "";
var userkenn = "";
// OleDbCommand olecmd = new OleDbCommand("DELETE From AktiveUser WHERE User_Kennzeichen = 'nh'", conn);
string query = "DELETE From AktiveUser WHERE ClientTyp= @cltyp AND MAC_Adresse = @macadress AND User_Kennzeichen = @userkenn";
OleDbCommand olecmd = new OleDbCommand(query, conn);
// olecmd.ExecuteNonQuery();
// OleDbCommand olecmd = new OleDbCommand("DELETE From AktiveUser WHERE User_Kennzeichen = 'nh'", conn);
olecmd.Parameters.AddWithValue(@cltyp, rowview["ClientTyp"].ToString());
olecmd.Parameters.AddWithValue(@macadress, rowview["Arbeitsplatz"].ToString());
olecmd.Parameters.AddWithValue(@userkenn, rowview["Anmeldung"].ToString());
if (selectedIndex != -1)
{
var deletedrow = dbtable.Rows[selectedIndex];
deletedrow.Delete();
oleda.DeleteCommand = olecmd;
oleda.Update(dbtable);
}
else
{
System.Windows.MessageBox.Show("Please Select a row to Delete");
}
You have two mistakes here; the first is that the parameters being added need to be within double quotes (as the prior answers have pointed out).
The other is that the OleDB database provider does not support named parameters within the query itself.
OleDbCommand.Parameters Property (System.Data.OleDb) | Microsoft Docs[^]
OleDB DocumentationThe OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used.
Try these changes to your problemstring query = "DELETE From AktiveUser WHERE ClientTyp= ? AND MAC_Adresse = ? AND User_Kennzeichen = ?"; OleDbCommand olecmd = new OleDbCommand(query, conn); olecmd.Parameters.AddWithValue("@cltyp", rowview["ClientTyp"].ToString()); olecmd.Parameters.AddWithValue("@macadress", rowview["Arbeitsplatz"].ToString()); olecmd.Parameters.AddWithValue("@userkenn", rowview["Anmeldung"].ToString());
You haven't put quotes around@cltyp
and the two others, so now it just refers to the value of thecltyp
variable - which is an empty string. Put quotes around@cltyp
,@macadress
and@userkenn
.
这篇关于必须声明标量变量。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!