我在Insert语句中尝试添加图片时遇到问题。消息
Command Text属性尚未正确初始化
出现。我试着寻找解决方案,但我仍然不知道如何解决它。
以下是代码:
{{1}}
答案 0 :(得分:0)
您正在致电
dbcomm.ExecuteNonQuery()
以任何方式设置查询之前。您的insert语句仅作为此时名为query
的字符串变量的内容提供。
不清楚代码示例中变量dbcomm
的来源。
答案 1 :(得分:0)
您在设置命令文本之前调用了dbcomm.ExecuteNonQuery()
(在dbcomm = New MySqlCommand(query, dbconn)
INSERT查询不应该是ExecuteReader()ed - 看起来你已经尝试了几种方法来使它工作,试验和错误,现在还有旧的垃圾代码......
以下是正确顺序的代码:
警告未来的访客:请勿复制或重新使用此代码。这是一种特别糟糕的数据库访问方式。 后来在这篇文章中,我请求OP转储并重新使用正确的数据库访问库。
dbconn.Open()
Dim query As String
query = "INSERT INTO `player`(`ID`, `First_Name`, `Last_Name`, `Gender`, `Date_of_Birth`, `Civil_Status`, `Nationality`, `Address`, `Status', `Picture`) VALUES('" + TextBox7.Text + "','" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox9.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox8.Text + "', @Pic)"
dbcomm = New MySqlCommand(query, dbconn)
dbcomm.Parameters.AddWithValue("@Pic", Content)
dbcomm.ExecuteNonQuery()
dbconn.Close()
所有这些都应该在Try Catch中,尽管将dbConn.Close()放在Finally中是个好主意。您可能希望在关闭之前检查连接状态(如果它无法打开,抛出异常) - 您不希望调用失败
顺便说一下,请考虑抛弃所有这些代码并使用对象关系映射器,如nHibernate,Entity Framework,Datasets 等。在这个时代(即过去10年)没有人应该编写低级数据库代码来打开/关闭连接并通过在业务逻辑代码中填充SQL字符串来插入数据。现在所有这些都由框架处理,知道应用程序中的对象,并管理数据你的数据库。编写自己的数据库代码并不是很酷,因为没有人再编写汇编语言或其他低级别的guff了。它打开应用程序以解决巨大的安全问题,并导致难以维护和开发的低质量代码
附录:正如Bugs在下面指出的那样,(以及为什么我建议你把所有这些都交给专门用于数据访问的库)这个SQL编写的方式真的很糟糕,并且是一个巨大的安全性风险即可。在任何一个文本框中放置一个精心放置的撇号,然后是一些特制的SQL和攻击者可以清除整个数据库,转储其内容等等。