所以这是我在一段时间内不得不处理的令人沮丧的编码问题之一。
我通过自动化一直制作小型数据库,而且我一直都使用这种方法,而且我总能通过使用“显示表格数据”立即看到结果
所以我有1000个文件都包含几行数据,我的脚本遍历文件并将相关数据上传到数据库。
我的程序读取数据很好,将数据精确地插入到表中(或说它确实如此),但.mdf不会更新,并且在程序退出后 - 总是保存0行数据。
我在两台不同的计算机上尝试过我的常规方法(我已经成功使用了十几次)而没有运气。
所以DB开头没有任何内容。
所以这是代码:
Using check2 As New SqlClient.SqlCommand("Select Count (*) From Drops", con)
MsgBox(check2.ExecuteScalar)
//This returns 0
End Using
For Each newfile As String In Directory.GetFiles(fileLoc)
//A lot of uninteresting code
Using con As New System.Data.SqlClient.SqlConnection(connStr)
con.Open()
Using check As New SqlClient.SqlCommand("SELECT COUNT(*) FROM Drops WHERE Time='" & time & "' AND Lat='" & theLat & "' AND Long='" & theLong & "'", con)
If check.ExecuteScalar = 0 Then
Using Update As New SqlClient.SqlCommand("INSERT INTO Drops(Vendor, Model, AndVer, Time, SubType, Lat, Long, LAC, CellID) VALUES('" & Vendor & "','" & Model & "','" & AndroidVer & "','" & time & "','" & SubType & "'," & theLat & "," & theLong & "," & LAC & ",'" & cellID & "')", con)
Update.ExecuteNonQuery()
added += 1
End Using
End If
End Using
End Using
Next
Using check3 As New SqlClient.SqlCommand("Select Count (*) From Drops", con)
MsgBox(check3.ExecuteScalar)
//This returns over 1000
End Using
所以我知道INSERT命令有效,因为check3在脚本开始时报告0时从“Drops”返回1000个条目。所以我的问题是 - 所有数据在哪里?
mdf文件似乎永远不会更新,每次我在脚本结束后返回它们,它们总是包含0个条目 - 我检查了位于bin和主项目本身的mdf文件。是否有我意外触及的设置或开关?
更奇怪的是,我认为这可能是一个调试问题 - 因此我发布了一个项目,认为一旦它退出调试环境就会开始保存数据 - 但不是。无论写入多少文件,mdf文件都不会超过3mb(空白)。
任何帮助总是非常感谢, 谢谢, -Z
答案 0 :(得分:0)
我打赌你以这种方式使用连接字符串
Dim connStr As String = "Server=your_server;Database=|DataDirectory|\name_of_db;User Id=user_name;Password=my_password"
或者它位于config.file
<connectionStrings>
<add name="ConnString"
connectionString="Data Source=(LocalDB)\v12.0;AttachDbFilename=|DataDirectory|\yourDatabase.mdf;Integrated Security=True" />
</connectionStrings>
如果是这样,请注意有时Data Source=|DataDirectory|\...
在调试时会出现问题。请记住,在调试代码时,项目文件夹中的\bin\debug
会有另一个数据库。您可能正在更新此数据库中的记录而不是原始记录。
尝试设置绝对路径并检查记录是否正在更新。
ConnectionString = "Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\yourProjectFolder\YourDBName.mdf;Integrated Security=True"
有一个属性Copy to Output Directory
,默认值为Copy if newer
(如果您使用的是.mdf
或.mdb
文件,则默认值为Copy always
) 。您可以查看 MSDN document 以了解此属性的含义。简而言之,本地数据库文件将被复制到Output目录,而THAT数据库将被更新。
如果您不希望Visual Studio为您复制数据库文件,则可以将“复制到Output Directory
”属性设置为Do not copy
。然后,您可以选择何时以及如何覆盖数据库文件。当然,您仍然需要两个数据库文件副本:在设计时,您正在使用解决方案目录中的数据库文件,而在运行时,您正在修改输出目录中的数据库文件。