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语句中时,我得到了错误。