有人可以查看我的代码,并可能指出为什么它不允许我将数据插入我的Postgres数据库?我正在为我的收藏创建一个漫画书数据库。
每次单击提交按钮提交输入的数据时,调试器都会抛出异常:
'Npgsql.dll'中发生了'Npgsql.PostgresException'类型的未处理异常
执行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()
答案 0 :(得分:0)
如上所述连接字符串以形成sql命令时,很容易陷入常见错误。例如,在代码中,字符串值应该用单引号括起来。
因此,假设IssueName是字符串类型字段,您应该以这种方式表示值
.... VALUES ('" & comicName & "'," & ....
但这是一种比疾病更糟的补救措施。首先,如果您的comicName变量包含单引号,则会出现另一个问题,其次,字符串的串联是导致Sql Injection的主要方式(一个非常危险的代码漏洞)
将值传递给数据库引擎(...这个世界的任何数据库引擎)的唯一正确方法是通过参数化查询
您编写查询放置参数占位符而不是直接写入值 (没有字符串连接,没有奇怪的&和单引号....)
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。