Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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# ADO.NET SQL命令参数能否包含子查询?_C#_Sql_Sql Server_Ado.net_Parameterized Query - Fatal编程技术网

C# ADO.NET SQL命令参数能否包含子查询?

C# ADO.NET SQL命令参数能否包含子查询?,c#,sql,sql-server,ado.net,parameterized-query,C#,Sql,Sql Server,Ado.net,Parameterized Query,是否可以在查询中创建SQL select maxid作为变量 这不起作用: command.CommandText = "INSERT INTO ordreid (ordrenr,ordreid) SELECT @ordrenr, @ordreid"; command.Parameters.AddWithValue("@ordrenr", nyordre); command.Parameters.AddWithValue("@ordreid", ("MAX(ordreid)+1 FROM ord

是否可以在查询中创建SQL select maxid作为变量

这不起作用:

command.CommandText = "INSERT INTO ordreid (ordrenr,ordreid) SELECT @ordrenr, @ordreid";
command.Parameters.AddWithValue("@ordrenr", nyordre);
command.Parameters.AddWithValue("@ordreid", ("MAX(ordreid)+1 FROM ordreid"));
command.ExecuteScalar();
这是一张我想做的事情的照片。5个客户已将项目添加到其订单中。客户1有3项,客户2有4项,客户3有1项,依此类推

这样我就有了1个ordreid,即使整个订单可以包含30个项目

查询参数不能包含SQL逐字记录

这就是这些准备好的语句如何防止,因为它们不是直接插入的。相反,查询中只使用相应的数据——在本例中,这是包含SQL的字符串,并导致无效的SQL语法

然后,SQL文本需要看起来类似于以下内容,尽管这可能无法实现所需的功能。询问如何完成更高级别的任务将导致实际有用的查询/方法

@"INSERT INTO ordreid (ordrenr, ordreid)
  SELECT @ordrenr, MAX(ordreid)+1
  FROM ordreid"
查询参数不能包含SQL逐字记录

这就是这些准备好的语句如何防止,因为它们不是直接插入的。相反,查询中只使用相应的数据——在本例中,这是包含SQL的字符串,并导致无效的SQL语法

然后,SQL文本需要看起来类似于以下内容,尽管这可能无法实现所需的功能。询问如何完成更高级别的任务将导致实际有用的查询/方法

@"INSERT INTO ordreid (ordrenr, ordreid)
  SELECT @ordrenr, MAX(ordreid)+1
  FROM ordreid"
查询参数不能包含SQL逐字记录

这就是这些准备好的语句如何防止,因为它们不是直接插入的。相反,查询中只使用相应的数据——在本例中,这是包含SQL的字符串,并导致无效的SQL语法

然后,SQL文本需要看起来类似于以下内容,尽管这可能无法实现所需的功能。询问如何完成更高级别的任务将导致实际有用的查询/方法

@"INSERT INTO ordreid (ordrenr, ordreid)
  SELECT @ordrenr, MAX(ordreid)+1
  FROM ordreid"
查询参数不能包含SQL逐字记录

这就是这些准备好的语句如何防止,因为它们不是直接插入的。相反,查询中只使用相应的数据——在本例中,这是包含SQL的字符串,并导致无效的SQL语法

然后,SQL文本需要看起来类似于以下内容,尽管这可能无法实现所需的功能。询问如何完成更高级别的任务将导致实际有用的查询/方法

@"INSERT INTO ordreid (ordrenr, ordreid)
  SELECT @ordrenr, MAX(ordreid)+1
  FROM ordreid"
命令参数。AddWithValue@ordreid,来自ordreid的MAXordreid+1

方法名AddWithValue提示了此方法不起作用的原因:参数包含数据,即:值。它们不能表示SQL语句的一部分

您的意图似乎是用这段SQL替换@ordreid。如果是这样,那么就没有理由有一个参数。只需手动执行替换并更改CommandText:

请注意,除了将命令文本分散在两行之外,为了便于阅读,我还使用了C的@…字符串语法,更改了四件事。只有前两点至关重要:

我把MAX…SQL直接移到了你的命令文本中。这使得无效的@ordreid参数过时

要从ordreid确定MAXordreid的值,需要一个子查询;因此,在MAX之前添加了SELECT。否则,语法将无效

我将您的选择替换为。否则,由于前一点,我们会有两个选择非常接近对方,这看起来有点混乱

我加了一个,;在查询的末尾。当前版本的SQLServer还不需要这样的语句终止符,但微软暗示,在未来版本的t-SQL中,它们可能成为强制性的。因此,我相信现在养成这是一个好习惯

总而言之,您可能应该将ordreid列转换为IDENTITY列,并让SQL Server选择要插入的值,从而使SELECT MAX…业务过时。否则,如果两个进程或线程同时执行相同的INSERT命令,则可能会导致多行ordreid值相同

命令参数。AddWithValue@ordreid,来自ordreid的MAXordreid+1

方法名AddWithValue提示了此方法不起作用的原因:参数包含数据,即:值。它们不能表示SQL语句的一部分

您的意图似乎是用这段SQL替换@ordreid。如果是这样,那么就没有理由有一个参数。只需手动执行替换并更改CommandText:

请注意,除了将命令文本分散在两行之外,为了便于阅读,我还使用了C的@…字符串语法,更改了四件事。只有前两点至关重要:

我把MAX…SQL直接移到了你的命令文本中。这使得无效的@ordreid参数过时

要从ordreid确定MAXordreid的值,需要一个子查询;因此,在最大值之前添加SELECT。否则,synt ax是无效的

我将您的选择替换为。否则,由于前一点,我们会有两个选择非常接近对方,这看起来有点混乱

我加了一个,;在查询的末尾。当前版本的SQLServer还不需要这样的语句终止符,但微软暗示,在未来版本的t-SQL中,它们可能成为强制性的。因此,我相信现在养成这是一个好习惯

总而言之,您可能应该将ordreid列转换为IDENTITY列,并让SQL Server选择要插入的值,从而使SELECT MAX…业务过时。否则,如果两个进程或线程同时执行相同的INSERT命令,则可能会导致多行ordreid值相同

命令参数。AddWithValue@ordreid,来自ordreid的MAXordreid+1

方法名AddWithValue提示了此方法不起作用的原因:参数包含数据,即:值。它们不能表示SQL语句的一部分

您的意图似乎是用这段SQL替换@ordreid。如果是这样,那么就没有理由有一个参数。只需手动执行替换并更改CommandText:

请注意,除了将命令文本分散在两行之外,为了便于阅读,我还使用了C的@…字符串语法,更改了四件事。只有前两点至关重要:

我把MAX…SQL直接移到了你的命令文本中。这使得无效的@ordreid参数过时

要从ordreid确定MAXordreid的值,需要一个子查询;因此,在MAX之前添加了SELECT。否则,语法将无效

我将您的选择替换为。否则,由于前一点,我们会有两个选择非常接近对方,这看起来有点混乱

我加了一个,;在查询的末尾。当前版本的SQLServer还不需要这样的语句终止符,但微软暗示,在未来版本的t-SQL中,它们可能成为强制性的。因此,我相信现在养成这是一个好习惯

总而言之,您可能应该将ordreid列转换为IDENTITY列,并让SQL Server选择要插入的值,从而使SELECT MAX…业务过时。否则,如果两个进程或线程同时执行相同的INSERT命令,则可能会导致多行ordreid值相同

命令参数。AddWithValue@ordreid,来自ordreid的MAXordreid+1

方法名AddWithValue提示了此方法不起作用的原因:参数包含数据,即:值。它们不能表示SQL语句的一部分

您的意图似乎是用这段SQL替换@ordreid。如果是这样,那么就没有理由有一个参数。只需手动执行替换并更改CommandText:

请注意,除了将命令文本分散在两行之外,为了便于阅读,我还使用了C的@…字符串语法,更改了四件事。只有前两点至关重要:

我把MAX…SQL直接移到了你的命令文本中。这使得无效的@ordreid参数过时

要从ordreid确定MAXordreid的值,需要一个子查询;因此,在MAX之前添加了SELECT。否则,语法将无效

我将您的选择替换为。否则,由于前一点,我们会有两个选择非常接近对方,这看起来有点混乱

我加了一个,;在查询的末尾。当前版本的SQLServer还不需要这样的语句终止符,但微软暗示,在未来版本的t-SQL中,它们可能成为强制性的。因此,我相信现在养成这是一个好习惯


总而言之,您可能应该将ordreid列转换为IDENTITY列,并让SQL Server选择要插入的值,从而使SELECT MAX…业务过时。否则,如果两个进程或线程同时执行同一个INSERT命令,可能会导致多行ordreid值相同。

为什么不使用标识列?标识列会增加id。我希望该特定表具有2列ordreid,ordrenr。添加项目时,Ordrenr应该增加,但ordreid应该只在用户创建一个全新的项目列表时增加。为什么不使用标识列?标识列会增加id。我希望特定表有2列ordreid,Ordrenr。添加项目时,Ordrenr应该增加,但ordreid应该只在用户创建一个全新的项目列表时增加。为什么不使用标识列?标识列会增加id。我希望特定表有2列ordreid,Ordrenr。Ordrenr应在添加项目时增加,但ordreid应仅在用户进行w时增加
新项目列表。为什么不使用标识列?标识列会增加id。我希望特定表有2个列ordreid,ordrenr。Ordrenr应该在添加项目时增加,但ordreid应该只在用户创建一个全新的项目列表时增加。