【问题标题】:How to Use a Select Statement in a Parameterized Insert Into Statement如何在参数化的 Insert Into 语句中使用 Select 语句
【发布时间】:2013-10-21 20:37:28
【问题描述】:

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

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()

这是错误信息:

Data type mismatch in criteria expression.

问题出在这行代码:

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 & ")")

如果我将Select Statement 替换为Select Statement 生成的值,则代码运行良好。

我怎样才能让它工作?

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

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()

我在运行新代码时收到此错误:

Unspecified error

【问题讨论】:

  • 您应该将计算第三个参数的查询放在主查询中,而不是作为参数
  • @EstebanElverdin 我听取了您的建议(请参阅原始帖子更新)。我收到了这个错误Unspecified error
  • @EstebanElverdin 如果我自己运行 select 语句,它会返回一个没有错误的值。但是当我将它添加到我的 INSERT INTO statement 时,我得到了错误。

标签: vb.net oledb insert-into sql


【解决方案1】:

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

应该是这样的

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 

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多