SQL的“插入”是工作.....但不是

时间:2015-08-26 04:47:01

标签: sql sql-server database vb.net sql-insert

所以这是我在一段时间内不得不处理的令人沮丧的编码问题之一。

我通过自动化一直制作小型数据库,而且我一直都使用这种方法,而且我总能通过使用“显示表​​格数据”立即看到结果

所以我有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

1 个答案:

答案 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。然后,您可以选择何时以及如何覆盖数据库文件。当然,您仍然需要两个数据库文件副本:在设计时,您正在使用解决方案目录中的数据库文件,而在运行时,您正在修改输出目录中的数据库文件。