我正在使用ADO.NET(OleDB)将旧的VB6代码转换为VB.NET。这是我的查询,它将在VB.NET中运行时创建一个空白表,但在Access中直接运行时可以工作。这个代码大概也适用于VB6,因为我使用相同的SQL:
SELECT qryAsOf.name, qryAsOf.type, 0 as opt, 0 as swap
INTO qryCon
FROM qryAsOf
LEFT JOIN qryLinked on qryAsOf.c = qryLinked.lc
我觉得这与左连接有关,选择合在一起,但就像我说只有VB有问题,Access完美处理它。
谢谢:)
编辑:更多详情 -
如果没有INTO行,此查询将返回所有600多行。
这不起作用:
cm.CommandText = "CREATE TABLE qryCon (etc...)"
cm.ExecuteNonQuery()
cm.CommandText = "INSERT INTO qryCon SELECT ..." '(rest of query above without INTO line)
cm.ExecuteNonQuery
这项工作:
cm.CommandText = "CREATE PROC qryCon AS SELECT ..." '(same select as above without INTO, again)
cm.ExecuteNonQuery
可以正常工作的CREATE PROC,除了我需要稍后将数据插入其中,所以我得到了关于如何需要可更新表的错误。我真的希望结束qryCon成为一个表,但我似乎无法让它工作:(
*但是,当我做这样的事情时(使用上面存储的proc(重命名),如果在Access中查看,则充满了数据)
cm.CommandText = "SELECT * FROM storedProc"
dr = cm.ExecuteReader
while dr.Read
cm.CommandText = "INSERT INTO qryCon VALUES (dr.GetValue(0), dr.GetValue(1), dr.GetValue(2), dr.GetValue(3))
cm.ExecuteNonQuery
end while
这不起作用!顺便说一句,我删除了查询中的串联以确保可读性。它在实际项目中是正确的。
答案 0 :(得分:0)
中间件可能不支持select into语法,这往往有些泛泛。该语句可能必须以“passthrough”执行,即本机语法模式。
答案 1 :(得分:0)
您的VB6 / Access语法在解析结果时会在您查询对象本身的位置进行处理。
对于.Net,您希望利用较新的ADO.Net库并使用DataReader(或DataAdapter,如果您需要在代码中多次处理结果而无需再次访问数据库)对象为了处理您的查询。您可以在MSDN site上找到如何使用它们的概述。
编辑:
更新问题后,您希望SQL查询为:
SELECT qryAsOf.name, qryAsOf.type, 0 as opt, 0 as swap
FROM qryAsOf
LEFT JOIN qryLinked on qryAsOf.c = qryLinked.lc
然后你将遍历结果并通过每个循环解析值(在MSDN链接中找到类似
的内容)If reader.HasRows Then
Do While reader.Read()
Console.WriteLine(reader.GetInt32(0) & vbTab & reader.GetString(1))
Loop
Else
Console.WriteLine("No rows found.")
End If
答案 2 :(得分:0)
由于我之前关于传递模式的评论似乎已被低估,可能是@onedaywhen,我包含此链接:
http://msdn.microsoft.com/en-us/library/ms681754(v=vs.85).aspx
Jet OLEDB:ODBC传递语句 (DBPROP_JETOLEDB_ODBCPASSTHROUGH)
表示Jet应该传递SQL 后面的Command对象中的文本 结束不变。
文档似乎表明,除非调用此功能,否则中间件可以更改SQL文本。所以我再说一遍,你可能想确保oleDB支持SELECT INTO语法。我并不是说SELECT INTO不受支持 - 只是这是一个值得OP注意的问题。
P.S。当通过旨在支持各种后端的中间层与数据库交谈时,我认为,当语句包含像IIF()或UDF这样的函数时,使用传递模式是一个好主意,或任何语法,例如SELECT INTO,这是非普遍支持的。
P.P.S。以下是一些可能相关的其他信息: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.aspx