使用 Npgsql 和 VB.net 将数据插入 Postgresql 时出现问题

Having an issue inserting data into Postgresql using Npgsql and VB.net

有人可以看看我的代码并指出为什么它不允许我将数据插入我的 Postgres 数据库吗?我正在为我的 collection.

创建一个漫画书数据库

每次我点击提交按钮提交输入的数据时,调试器都会抛出异常:

''Npgsql.PostgresException' 类型的未处理异常发生在 Npgsql.dll'

在执行 myCommand.ExecuteNonQuery() 函数时发生。

我花了一整天时间想弄明白这个问题,我完全是个菜鸟。任何指导都会很棒!

Dim myConnection As NpgsqlConnection = New NpgsqlConnection()
        Dim myCommand As NpgsqlCommand
        Dim mySQLString As String
        myConnection.ConnectionString = "Server=localhost;Port=5432;Database=ComicsDatabase;User Id=postgres;Password=xxxxxxxx;"

        mySQLString = "INSERT INTO Comics (IssueName,IssueNumber,PublicationDate,Publisher,IsVariant) VALUES (" & comicName & "," & issueNumber & "," & publicationDate & "," & publisher & "," & isVariant & ");"
        myCommand = New NpgsqlCommand(mySQLString, myConnection)
        myConnection.Open()
        myCommand.ExecuteNonQuery()
        myConnection.Close()

当您按上述方式连接字符串以形成 sql 命令时,很容易陷入常见错误。例如,在您的代码中,字符串值应该用单引号括起来。

所以,假设IssueName是一个字符串类型的字段,你应该这样表达这个值

.... VALUES ('" & comicName & "'," & ....

但这是比疾病还糟糕的治疗方法。首先,如果您的 comicName 变量包含单引号,您将遇到另一个问题,其次,字符串的连接是导致 Sql 注入(一个非常危险的代码漏洞)的主要方式

将值传递给数据库引擎(...这个世界上的任何数据库引擎)的唯一正确方法是通过参数化查询

您编写的查询使用参数占位符而不是直接使用值 (没有字符串连接,没有奇怪的 & 和单引号....)

  mySQLString = "INSERT INTO Comics 
  (IssueName,IssueNumber,PublicationDate,Publisher,IsVariant) 
  VALUES (:comicName,:issueNumber,:publicationDate,:publisher,:isVariant);"

然后使用添加到命令参数集合的参数传递值

  myCommand = New NpgsqlCommand(mySQLString, myConnection)
  myCommand.Parameters.Add(":comicName", NpgsqlDbType.Varchar).Value = comicName

当然,您需要添加占位符所需的所有其他参数,重要的是要记住为您尝试更新的特定列使用正确的 NpgsqlDbType。