Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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# 为什么我得到OLEDBEException“一个或多个必需参数没有给定值?”_C#_.net_Sql_Oledb - Fatal编程技术网

C# 为什么我得到OLEDBEException“一个或多个必需参数没有给定值?”

C# 为什么我得到OLEDBEException“一个或多个必需参数没有给定值?”,c#,.net,sql,oledb,C#,.net,Sql,Oledb,这是我的代码: command.CommandText = "SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE B.FormName = " + GenericRoutines.SqlFmt(form.Name) + " AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName" + " ORDER BY B.ID

这是我的代码:

command.CommandText = 
   "SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE B.FormName = " + 
   GenericRoutines.SqlFmt(form.Name) + 
   " AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName" +
   " ORDER BY B.ID";

OleDbDataReader reader = command.ExecuteReader();
SQL是:

SELECT DISTINCT B.* 
FROM BlankFormSubmissions B, Actions A 
WHERE B.FormName = 'FindingNemo' 
  AND B.ProcessName = A.ProcessName 
  AND B.ActionName = A.ActionName 
ORDER BY B.ID

您需要引用传递到查询中的任何字符串。尝试:

command.CommandText = "SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE B.FormName = '" + 
        GenericRoutines.SqlFmt(form.Name) + "' AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName" +
        " ORDER BY B.ID";
一旦你过了v,就容易多了。涉及的学习曲线较小,使用参数化查询或存储过程来完成这类工作更整洁、更安全


HTH.

您需要引用传递到查询中的任何字符串。尝试:

command.CommandText = "SELECT DISTINCT B.* FROM BlankFormSubmissions B, Actions A WHERE B.FormName = '" + 
        GenericRoutines.SqlFmt(form.Name) + "' AND B.ProcessName = A.ProcessName AND B.ActionName = A.ActionName" +
        " ORDER BY B.ID";
一旦你过了v,就容易多了。涉及的学习曲线较小,使用参数化查询或存储过程来完成这类工作更整洁、更安全



HTH.

我通过在Access中运行SQL发现,我实际上只是引用了Access表中不存在的列FormName。

我通过在Access中运行SQL发现,实际上我只是引用了Access表中不存在的列FormName。

使用参数化查询,而不是将SQL语句串联在一起-帮助…..嗨,如果只使用命令文本:SELECT DISTINCT B.*FROM blankFormB,动作A?当你在做的时候,试着在内部连接中使用更新的标准化ANSI连接语法。。。。在…上子句-有助于避免不需要的笛卡尔积,而且阅读和理解起来更加清晰…谢谢大家,但是这段代码可以完美地防止任何攻击,方法是你看不到的实现,GenericRoutines.SqlFmt…@Lost Hobbit-如果这是真的,我很想看到SqlFmt。使用参数化查询,而不是将SQL语句连接在一起-帮助…..嗨,如果只使用命令文本,它是如何工作的:从BlankFormSubmissions B中选择DISTINCT B.*和BlankFormSubmissions B,Actions A?当您使用时,尝试使用新的、标准化的ANSI连接语法和内部连接。。。。在…上子句-有助于避免不需要的笛卡尔积,而且阅读和理解起来更加清晰…谢谢大家,但是这段代码可以完美地防止任何攻击,方法是你看不到的,GenericRoutines.SqlFmt…@Lost Hobbit-如果是真的,我很想看到SqlFmt。谢谢,但我的方法SqlFmt为我添加了引号。这是一句来自计算的古老格言,缩写为“PSIGSO”-“输入Sh1t,输出Sh1t”。也许发布一个更完整的代码示例会给您带来更多有用的答案;-很高兴你对它进行了排序。我认为我发布代码生成的SQL已经足够了。。。如果没有表定义,一切都是错误的,因为IDE找不到任何引用的db对象。这是一条直线,不是通向全能上帝的直线-谢谢,但我的方法SqlFmt为我添加了引号。这是一句古老的计算格言,缩写为“PSIGSO”-“输入Sh1t,输出Sh1t”。也许发布一个更完整的代码示例会给您带来更多有用的答案;-很高兴你对它进行了排序。我认为我发布代码生成的SQL已经足够了。。。如果没有表定义,一切都是错误的,因为IDE找不到任何引用的db对象。这是一条直线,不是通向全能上帝的直线-