使用VB .NET将数据插入SQL Server

时间:2013-01-02 19:15:46

标签: sql sql-server vb.net

我正在尝试将一些示例数据插入到sql server中。

我正在使用Visual Basic 2010 Express。

以下是代码:

Public Sub insert()

    Dim myconnect As New SqlClient.SqlConnection
    myconnect.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DATABASE_NUOVO.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"


    Dim mycommand As SqlClient.SqlCommand = New SqlClient.SqlCommand()
    mycommand.Connection = myconnect
    mycommand.CommandText = "INSERT INTO utenti (nome) VALUES ('mario')"
    myconnect.Open()

    Try
        mycommand.ExecuteNonQuery()
    Catch ex As System.Data.SqlClient.SqlException
        MsgBox(ex.Message)
    End Try
    myconnect.Close()
    MsgBox("Success")

End Sub

代码似乎运行正常,但是当我在运行调试后查看数据库时,我看不到示例数据。

问题出在哪里?

由于

3 个答案:

答案 0 :(得分:6)

正如我之前在此网站上所说的那样 - 整个用户实例和AttachDbFileName = 方法存在缺陷 - 充其量! Visual Studio将围绕.mdf文件和最有可能进行复制,您的INSERT工作正常 - 但您只是查看错误的.mdf文件< / strong>到底!

如果你想坚持这种方法,那么尝试在myConnection.Close()调用上设置一个断点 - 然后用SQL Server Mgmt Studio Express检查.mdf文件 - 我几乎可以肯定你的数据在那里。

我认为真正的解决方案将是

  1. 安装SQL Server Express(你已经完成了)

  2. 安装SQL Server Management Studio Express

  3. SSMS Express 中创建数据库,为其指定一个逻辑名称(例如Database_Nuovo

  4. 使用其逻辑数据库名称(在服务器上创建时给定)连接到它 - 并且不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=Database_Nuovo;Integrated Security=True
    

    其他所有内容都完全与以前相同......

  5. 另外:检查Copy to Output Directory目录中DATABASE_NUOVO.mdf文件的App_Data属性的值是什么(在Visual Studio Solution Explorer中找到它)。

    可能会发生什么(并且经常发生):

    • 当Visual Studio启动您的应用程序进行调试时,它会将Database_Nuovo.mdf复制到运行该应用程序的输出目录(您的.\debug\bin目录)
    • 您的INSERT然后针对.mdf文件的副本运行并且运行正常
    • 您停止调试并再次检查数据库文件 - 但这一次,您正在查看Database_Nuovo.mdf目录中的App_Data - &gt; 当然您插入的数据不存在,因为它已被插入另一个文件中!

答案 1 :(得分:2)

尝试更改Try..Catch代码以处理比SqlExceptions更多的错误类型。像这样:

    Try
        mycommand.ExecuteNonQuery()
    Catch ex As System.Data.SqlClient.SqlException
        MsgBox(ex.Message, , "Sql Exception")
    Catch ex As System.Exception
        MsgBox(ex.Message, , "General Exception")
    End Try

SqlExceptions不是可以抛出的唯一异常。

答案 2 :(得分:0)

试试吧..

Dim con As New SqlConnection
Dim cmd As New SqlCommand
Try
con.ConnectionString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DATABASE_NUOVO.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" //check your connection string carefully whether it points right directory
con.Open()
cmd.Connection = con
cmd.CommandText = "INSERT INTO table([field1], [field2]) VALUES([Value1], [Value2])" //make sure here your table and column name is exactly like as your database
cmd.ExecuteNonQuery()

Catch ex As Exception
MessageBox.Show("Error while inserting record on table...");
Finally
con.Close()
End Try