- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以这是一段时间以来我不得不处理的最令人沮丧的编码问题之一。
我一直通过自动化制作小型数据库,我一直使用这种方法,而且我总是能够通过使用“显示表数据”立即看到结果
所以我有 1000 个文件都包含几行数据,我的脚本遍历文件并将相关数据上传到数据库。
我的程序可以很好地读取数据,可以很好地将数据插入表中(或者说可以),但是 .mdf 不会更新,并且在程序退出后 - 始终保存 0 行数据。
我已经在两台不同的计算机上尝试了我的常规方法(我已经成功使用了十几次),但没有成功。
所以数据库一开始什么都没有。
代码如下:
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
最佳答案
我打赌你正在以这种方式使用连接字符串
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 以了解此属性的含义。简而言之,本地数据库文件将被复制到输出目录,该数据库将被更新。
如果您不希望 Visual Studio 为您复制数据库文件,您可以将 Copy to Output Directory
属性设置为 Do not copy
。然后由您选择何时以及如何覆盖数据库文件。当然,您仍然需要数据库文件的两份副本:在设计时,您正在使用解决方案目录中的数据库文件,而在运行时,您正在修改输出目录中的数据库文件。
关于SQL 的 "Insert Into"正在工作......但不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32218193/
我是一名优秀的程序员,十分优秀!