Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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
Vb.net 如何在参数化Insert Into语句中使用Select语句_Vb.net_Oledb_Insert Into_Sql - Fatal编程技术网

Vb.net 如何在参数化Insert Into语句中使用Select语句

Vb.net 如何在参数化Insert Into语句中使用Select语句,vb.net,oledb,insert-into,sql,Vb.net,Oledb,Insert Into,Sql,我正在尝试此代码,但出现错误: Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Weight) VALUES (?, ?, ?)", Nordeen_Investing_3.con) cmd3.Parameters.AddWithValue("@Calculation", Calculation) cmd3.Parameters.AddWithV

我正在尝试此代码,但出现错误:

Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Weight) VALUES (?, ?, ?)", Nordeen_Investing_3.con)
    cmd3.Parameters.AddWithValue("@Calculation", Calculation)
    cmd3.Parameters.AddWithValue("@[Interval]", Interval)
    cmd3.Parameters.AddWithValue("@Weight", "(SELECT (Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth)) / (StDevP(C." & Calculation & ") * StDevP(G.Growth)) AS Weight FROM " & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G " & On_Statement & ")")
    cmd3.ExecuteNonQuery()
这是错误消息:

条件表达式中的数据类型不匹配。

问题在于这一行代码:

cmd3.Parameters.AddWithValue(“@Weight””,“(选择(平均值(C.“&Calculation&“*G.Growth)-Avg(C.”&Calculation&“)*Avg(G.Growth))/(标准差(C.“&Calculation&”)标准差(G.Growth))作为权重_
从“&计算&”作为C_
内部连接“&增长率&”作为G_
“&On_语句(”)

如果我用
Select语句
生成的值替换
Select语句
,那么代码运行正常

我怎样才能让它工作

更新 根据以下建议,我已将代码更改为:

Dim cmd3 As OleDbCommand = New OleDbCommand("INSERT INTO Criteria (Calculation, [Interval], Weight) VALUES (?, ?, (SELECT (Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth)) / (StDevP(C." & Calculation & ") * StDevP(G.Growth)) AS Weight FROM " & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G " & On_Statement & "))", Nordeen_Investing_3.con)
    cmd3.Parameters.AddWithValue("@Calculation", Calculation)
    cmd3.Parameters.AddWithValue("@[Interval]", Interval)
    cmd3.ExecuteNonQuery()
我在运行新代码时收到此错误:


未指定错误

您试图通过子查询插入数据,您进行查询的方式不正确

应该是这样的

INSERT INTO table1
SELECT id FROM table2
WHERE ...
在您的特定情况下,OleDBCommand的查询如下所示

"INSERT INTO Criteria (Calculation, [Interval], Weight)
SELECT ?, ?, (Avg(C." & Calculation & " * G.Growth) - Avg(C." & Calculation & ") * Avg(G.Growth)) / (StDevP(C." & Calculation & ") * StDevP(G.Growth)) AS Weight FROM " & Calculation & " AS C INNER JOIN " & Growth_Rate & " AS G " & On_Statement 

您应该将计算第三个参数的查询放在主查询中,而不是作为parameter@EstebanElverdin我接受了你的建议(见原始帖子更新)。我收到了这个错误
未指定的错误
@EstebanElverdin如果我自己运行select语句,它将返回一个没有错误的值。但是当我把它添加到我的
INSERT-INTO语句中时,我得到了错误。