none
向SqlServer中插入数据 提示 错误“必须声明变量@picname”,各位帮我看看怎么回事 RRS feed

  • 问题




  • Dim dbConnection As OleDbConnection = New OleDbConnection(dbConnectionString) dbConnection.Open() Dim dbcommand As System.Data.OleDb.OleDbCommand dbcommand = New System.Data.OleDb.OleDbCommand("insert into picInfo(picname,piclx,picformat,pictime,picimage,picdescription) values(@picname,@piclx,@picformat,@pictime,@picimage,@picdescription)", dbConnection) Dim prm1 As New OleDbParameter("@picname", name) dbcommand.Parameters.Add(prm1) Dim prm2 As New OleDbParameter("@piclx", lx) dbcommand.Parameters.Add(prm2) Dim prm3 As New OleDbParameter("@picformat", format) dbcommand.Parameters.Add(prm3) Dim prm4 As New OleDbParameter("@pictime", time) dbcommand.Parameters.Add(prm4) Dim prm5 As New OleDbParameter("@picimage", FileByteArray) dbcommand.Parameters.Add(prm5) Dim prm6 As New OleDbParameter("@picdescription", description) dbcommand.Parameters.Add(prm6) Try dbcommand.ExecuteNonQuery() MsgBox("保存成功", MsgBoxStyle.SystemModal) Catch ex As Exception MsgBox(ex.Message.ToString) End Try dbConnection.Dispose() dbConnection.Close()
    大家好 ,帮我看看这段代码,想要往SqlServer里插入数据,为什么总提示错误 “必须声明变量@picname”,各位高手帮我看看 谢谢
    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2010年1月27日 2:00

答案

  •  对于SQl server  也是可以通过OleDb来访问的 只不过性能上不同而已,OleDb可以连接绝大多数数据库
    你这里的问题是如同X.X.Y版主所述,在OleDbCommand的CommandText中应统一用?来占位 然后按照先后顺序添加参数


    同时添加参数的时候注意判断下参数值是否为null  如果为null 在添加的时候这个参数实际上是传递不过去的  也会出现参数错误的情况 对于null的情况可以将参数值设置为DbNull.Value
    Memory all alone in the moonlight~My Blog in .NET~~~
    • 已标记为答案 litianlt 2010年1月28日 7:06
    2010年1月27日 5:08
    版主

全部回复

  • 向SQLSERVER插入数据你应该用SqlClient.SqlCommand吧
     Dim prm1 As New SqlClient.SqlParameter
    努力+方法=成功
    2010年1月27日 2:20
  • 你好!

    建议使用 SqlClient 的方式访问数据。

    你的问题是 OleDb 参数定义使用 ? 你将 SQL 改为下面的方式,另外注意添加参数的顺序。

    dbcommand = New OleDbCommand("insert into picInfo(picname,piclx,picformat,pictime,picimage,picdescription) values(?,?,?,?,?,?)" dbConnection)
    


    知识改变命运,奋斗成就人生!
    2010年1月27日 2:34
    版主
  •  对于SQl server  也是可以通过OleDb来访问的 只不过性能上不同而已,OleDb可以连接绝大多数数据库
    你这里的问题是如同X.X.Y版主所述,在OleDbCommand的CommandText中应统一用?来占位 然后按照先后顺序添加参数


    同时添加参数的时候注意判断下参数值是否为null  如果为null 在添加的时候这个参数实际上是传递不过去的  也会出现参数错误的情况 对于null的情况可以将参数值设置为DbNull.Value
    Memory all alone in the moonlight~My Blog in .NET~~~
    • 已标记为答案 litianlt 2010年1月28日 7:06
    2010年1月27日 5:08
    版主
  • 你好,谢谢,请问只能在oledbcommand的commandtext中统一用?来占位吗?还有没有其它方法


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2010年1月27日 7:01
  • OleDbCommand 的占位符就是"?" 没商量的。

    你声明了大量的Parameter,也添加到Command 对象中去了,但是从代码上看你没有给Parameter 赋值呀? Parameter.Value = ?????
    2010年1月27日 15:57
  • 既然是 SQL Server,最好使用性能更好的 SqlCommand,而不是OleDbCommand
    【孟子E章】
    2010年1月28日 0:40
    版主
  • 你好 谢谢。能不能提供一段代码让我看看呢  谢谢  


    昨夜西风凋碧树,独上高楼,望尽天涯路!
    2010年1月28日 0:48