C# ADO.NET SQL命令参数能否包含子查询?
是否可以在查询中创建SQL select maxid作为变量 这不起作用: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
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应该只在用户创建一个全新的项目列表时增加。