Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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# C Microsoft Access参数化查询未完成其工作_C#_Ms Access_C# 4.0_Oledb_Parameterized Query - Fatal编程技术网

C# C Microsoft Access参数化查询未完成其工作

C# C Microsoft Access参数化查询未完成其工作,c#,ms-access,c#-4.0,oledb,parameterized-query,C#,Ms Access,C# 4.0,Oledb,Parameterized Query,我已经对此做了研究,虽然下面的问题很相似,但我都试过了,但似乎没有一个能解决我的问题 以下是代码的相关部分: 我已相应地声明了以下类变量: 这是我目前的情况: 问题是,LoadDetails中的代码工作正常,并且在表单加载时运行。到目前为止,该代码可以一次又一次地使用,没有问题,但是当我尝试运行其他查询时,它们失败了。与直接失败和抛出异常不同,我在该区域使用的参数化查询tagSearchButton_Click和nameSearchButton_Click不会替换参数 这让我感到困惑,因为它正在

我已经对此做了研究,虽然下面的问题很相似,但我都试过了,但似乎没有一个能解决我的问题

以下是代码的相关部分: 我已相应地声明了以下类变量: 这是我目前的情况: 问题是,LoadDetails中的代码工作正常,并且在表单加载时运行。到目前为止,该代码可以一次又一次地使用,没有问题,但是当我尝试运行其他查询时,它们失败了。与直接失败和抛出异常不同,我在该区域使用的参数化查询tagSearchButton_Click和nameSearchButton_Click不会替换参数

这让我感到困惑,因为它正在做LoadDetails方法中应该做的事情。如果我在调试期间手动更改了命令文本,将参数手动替换为值,那么程序将按其应该的方式工作,并返回使用该语句返回的值

是什么导致OleDbCommand.Parameter.AddWithValue函数无法按预期工作

更多详情: 例如,我使用这一行:

command = new OleDbCommand("SELECT * from tagsTbl WHERE leName='@name'", connection);
因此,现在它会给命令这个字符串:

从标记BL中选择*其中leName='@name'

参数化查询应该做的是将@name更改为namesTextBox中的内容,如下所示:

command.Parameters.AddWithValue("@name", namesTextBox.Text);
假设我给文本框输入了Jane_Smith的值。因此,应将命令更改为:

从标签BL中选择*其中leName='Jane\u Smith'

但是它什么也不做,所以命令仍然是:

从标记BL中选择*其中leName='@name'

其他可能相关的信息: 我也刚刚读过,但这不是我面临的问题。我正在使用Microsoft Access 2013。我选择在我的程序中使用MS Access数据库,因为它更容易独立运行,如果客户端没有安装MS Office,则只需要安装免费的Access数据库引擎。此程序脱机工作


问题解决了感谢!我还了解到MySQL查询格式和MS Access的OleDb查询格式也不同。我最初使用的是MySQL查询格式。

您不需要在查询中的命名参数周围加上“单引号”。指定它时,CLR将其视为字符串。只需删除@name周围的引号,它就可以按预期工作。

那不行。。。老实说,我以前也试过。结果:参数化查询仍然没有更改参数。请注意,它现在对@name有效,谢谢。但是第二个@1不起作用。或者参数需要总是不同吗?@Aria:我也看到了同样的问题。您正在使用tagSearchButton\u单击方法中的“大约@1”。无论何时使用NamedParameter,都不需要将其包装为“不考虑其数据类型”。由于某些原因,在我使用nameSearchButton中的命令之前,tagSearchButton中使用的命令无法工作。。。。为什么呢?我删除了单引号也在我目前的代码没关系,似乎我输入了错误的东西在我的数据库。不过还是要再次感谢你。
command = new OleDbCommand("SELECT * from tagsTbl WHERE leName='@name'", connection);
command.Parameters.AddWithValue("@name", namesTextBox.Text);