我正在尝试使用vb.net将表导入到安全的sql数据库中,但它似乎超时(或者我认为)并且没有正确导入(空值),我截断表以保存字段类型和然后调用shell()函数导入文件和
'清除验证导入表中的现有数据
cmd.CommandText = "TRUNCATE TABLE HedgeFileBuilders.dbo.HedgeInput_" & strProduct & "_VALIDATOR;"
cmd.ExecuteNonQuery()
're-import the inforce file to validate it
Try
If chkSQLServerSource Then
Shell(SQLLOCALDIR & "Prog\bcp.exe FileBuilders.dbo.Input_" & strProduct & "_VALIDATOR in " & strFileName & " -c -t , -r \n -S server -U user -P passkey -F 2 -h TABLOCK", AppWinStyle.Hide, True)
Else
Shell(SQLLOCALDIR & "Prog\bcp.exe FileBuilders.dbo.Input_" & strProduct & "_VALIDATOR in " & strFileName & " -c -t , -r \n -S pcname -T -F 2 -h TABLOCK", AppWinStyle.Hide, True)
End If
Catch ex As Exception
MessageBox.Show("ERROR: An error occurred while re-importing the new business file. Contact the system administrator. " & ex.Message, "Contact System Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
'这不会返回并且错误但是结果为null。我在SQL中手动导入它可以工作(所有数据都在那里)。我甚至使用vb代码中的strFilename和Table名称来确保手动导入时没有出现错误的名称。
我做错了什么?
P.S。我尝试了超时整数参数'-l',在上面的布尔'True'之后,它没有帮助。
答案 0 :(得分:0)
我建议将正在执行的字符串(在本地变量中构建)与已知良好的工作批处理/ cmd文件中的类似字符串进行比较。
此外,如果bcp.exe的目录包含空格,则需要在字符串中的整个可执行文件路径周围使用双引号。类似于strFilename。
基本上,验证您的代码中是否生成了针对同一文件的已知良好的手动命令行导入。
答案 1 :(得分:0)
我尝试导入的表中的数据类型与被截断的SQL表不同并添加导入的数据(null而不是null等)我修复了数据类型以匹配并且shell命令行按预期工作