【问题标题】:Insert data into SQL Server using VB .NET使用 VB .NET 将数据插入 SQL Server
【发布时间】:2013-01-02 19:15:46
【问题描述】:

我正在尝试将一些示例数据插入 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

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

问题出在哪里?

谢谢

【问题讨论】:

  • 不要将您的 Catch 限制为仅 SqlExceptions。还有其他类型的异常可以在这里抛出。
  • 我应该如何更改 Catch? @RBarryYoung
  • INSERT INTO utenti (nome) VALUES ('mario') - nome 应该是这样吗?只是一个想法。

标签: sql sql-server vb.net


【解决方案1】:

正如我之前在此站点上所说的那样 - 整个 User Instance 和 AttachDbFileName= 方法是有缺陷的 - 充其量是! Visual Studio 将复制 .mdf 文件,很可能,您的 INSERT 工作正常 - 但您只是在查看 错误的 .mdf 文件结束!

如果您想坚持使用这种方法,请尝试在 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
    

    其他一切都完全和以前一样......

另外:检查DATABASE_NUOVO.mdf 文件中App_Data 目录中Copy to Output Directory 属性的值(在Visual Studio 解决方案资源管理器中找到它)。

可能发生的事情(而且经常发生):

  • 当 Visual Studio 启动您的应用进行调试时,它会将Database_Nuovo.mdf 复制到应用运行所在的输出目录(您的.\debug\bin 目录)
  • 您的INSERT 然后运行.mdf 文件的这个副本 并且工作正常
  • 您停止调试并再次检查数据库文件 - 但这次,您正在查看 App_Data 目录中的 Database_Nuovo.mdf --> 和 当然 您插入的数据 不存在,因为它被插入到了不同的文件中!

【讨论】:

  • +!:啊,很好。我错过了 .mdf 可以复制而不是移动或重命名(因此不会引发错误)。
  • 谢谢大家。 “错误”不是真正的错误,只是我在错误的数据库中搜索我的数据。我的数据在 \debug\bin 目录中。对不起:)
【解决方案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 不是这里唯一可以抛出的异常。

【讨论】:

  • 我已经更改了代码,但我没有收到任何类型的错误...@RBarryYoung
  • 您是否收到“成功”消息框?
【解决方案3】:

试试吧..

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

【讨论】:

  • 我已经尝试过您的建议,但我的 sql 语法没有错误。 @ridoy
  • 那么这将是您的数据库文件的问题,您的插入语句不适用于您在连接字符串中放入的数据库。先尝试marc_s的过程,然后应用我的代码。期待没关系..
猜你喜欢
  • 2012-09-20
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多