必须声明标量变量。 [英] Scalar variable must be declared.

查看:125
本文介绍了必须声明标量变量。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从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 变量 - 这是一个空字符串。在 @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 Documentation

The 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 problem

string 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 the cltyp variable - which is an empty string. Put quotes around @cltyp, @macadress and @userkenn.


这篇关于必须声明标量变量。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆