我是初学者。但是,让我解释一下我需要做什么并向您展示我的代码
我让程序正常运行。但我只是想知道这是否是正确的方法或我的代码是一些黑客的做法。
LEGEND: DTTable是CSV内的数据表
DT是具有SQL结果数据的数据表
首先,我将CSV中的所有行插入数据表
Dim parser As New FileIO.TextFieldParser(sRemoteAccessFolder & "text.csv")
parser.Delimiters = New String() {","}
parser.ReadLine()
Do Until parser.EndOfData = True
DTTable.Rows.Add(parser.ReadFields())
Loop
parser.Close()
然后我使用oledbdataadapter来运行select查询并使用select语句的结果填充另一个数据表
SQLString = "select * from tblProjects where ProjectID='" & DTTable.Rows.Item(i).Item("ProjectNumber") & "'"
da = New OleDb.OleDbDataAdapter(SQLString, Conn)
da.Fill(dt)
然后我运行if语句
If dt.Rows.Count = 0 then
SQLString = "INSERT STATEMENT HERE"
oCmd = New OleDb.OleDbCommand(SQLString, Conn)
oCmd.ExecuteNonQuery()
Else
SQLString = "UPDATE STATEMENT HERE"
oCmd = New OleDb.OleDbCommand(SQLString, Conn)
oCmd.ExecuteNonQuery()
End if
以上所有代码都在for循环中运行,以遍历CSV中的所有行
对于i = 0到DTTable.Rows.Count - 1
谢谢
答案 0 :(得分:0)
就个人而言,我不会使用.NET。我将表导入临时SQL Server表,然后编写我的查询以将临时表中的数据插入/更新到常规表。如果数据集很大,这肯定是您想要的方式。
如果这是一个需要经常重复的过程,您可以制作一个SSIS包。
答案 1 :(得分:0)
我使用datareader = command.ExecuteReader()
运行选择查询。然后:
If datareader.Read() then
'Update query using datareader(0) as a where predicate goes here
ElseIf datareader(0) = Nothing then
'Insert query goes here
End If
我应该说,我也是一个相对新手,所以也许其他人可以建议一种更优雅的方式。