首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常:由于在CommandText中使用了文本类型,因此没有为一个或多个参数VB.NET指定值

异常:由于在CommandText中使用了文本类型,因此没有为一个或多个参数VB.NET指定值
EN

Stack Overflow用户
提问于 2012-09-14 10:48:55
回答 2查看 404关注 0票数 0

我使用下面的代码来创建,以便将DataTable内容保存到空的mdb数据库中,所以首先我创建了数据表,当我尝试插入数据时,我得到了以下错误:没有为一个或多个参数赋值,现在我认为这个错误是由于使用此link中提到的文本引起的

但我不确定如何修复它,以下是代码,我在注释行中得到了异常

代码语言:javascript
复制
Dim cmd = cnn.CreateCommand
                cmd.CommandText = "CREATE TABLE productstable(supplierid Integer ,catalogid Integer ,ccode Text ,cname Text,pother2 Text, pother3 Double, cprice Double, rank Integer, rankchange Integer , PD Double, PDP Double , TPD Double, TPDP Double, sprice Double, msprice Double, minprice Double, sopriceDB Double, pother4 Long, usedsuppliermargin Double, cimageurl Text, ccategory Integer, pricetaggroup Byte , spricemargingroup Byte)"
                cmd.ExecuteNonQuery()

                Dim ocmd As New OleDbCommand("INSERT INTO productstable(supplierid , catalogid, ccode,cname,pother2,pother3,cprice,rank,rankchange,PD,PDP,TPD,TPDP,sprice,msprice,minprice,sopriceDB,pother4,usedsuppliermargin,cimageurl,ccategory,pricetaggroup,spricemargingroup) VALUES (@supplierid , @catalogid, @ccode, @cname, @pother2, @pother3, @cprice, @rank, @rankchange, @PD, @PDP, @TPD, @TPDP, @sprice, @msprice, @minprice, @sopriceDB, @pother4, @usedsuppliermargin,@cimageurl,@ccategory,@pricetaggroup,@spricemargingroup)", cnn)

                For i = 0 To mainDatatable.Rows.Count - 1
                    ocmd.Parameters.Add(New OleDbParameter("@supplierid", mainDatatable.Rows(i)("supplierid")))
                    ocmd.Parameters.Add(New OleDbParameter("@catalogid", mainDatatable.Rows(i)("catalogid")))
                    ocmd.Parameters.Add(New OleDbParameter("@ccode", mainDatatable.Rows(i)("ccode")))
                    ocmd.Parameters.Add(New OleDbParameter("@cname", mainDatatable.Rows(i)("cname")))
                    ocmd.Parameters.Add(New OleDbParameter("@pother2", mainDatatable.Rows(i)("pother2")))
                    ocmd.Parameters.Add(New OleDbParameter("@pother3", mainDatatable.Rows(i)("pother3")))
                    ocmd.Parameters.Add(New OleDbParameter("@cprice", mainDatatable.Rows(i)("cprice")))
                    ocmd.Parameters.Add(New OleDbParameter("@rank", mainDatatable.Rows(i)("rank")))
                    ocmd.Parameters.Add(New OleDbParameter("@rankchange", mainDatatable.Rows(i)("rankchange")))
                    ocmd.Parameters.Add(New OleDbParameter("@PD", mainDatatable.Rows(i)("PD")))
                    ocmd.Parameters.Add(New OleDbParameter("@PDP", mainDatatable.Rows(i)("PDP")))
                    ocmd.Parameters.Add(New OleDbParameter("@TPD", mainDatatable.Rows(i)("TPD")))
                    ocmd.Parameters.Add(New OleDbParameter("@TPDP", mainDatatable.Rows(i)("TPDP")))
                    ocmd.Parameters.Add(New OleDbParameter("@sprice", mainDatatable.Rows(i)("sprice")))
                    ocmd.Parameters.Add(New OleDbParameter("@msprice", mainDatatable.Rows(i)("msprice")))
                    ocmd.Parameters.Add(New OleDbParameter("@minprice", mainDatatable.Rows(i)("minprice")))
                    ocmd.Parameters.Add(New OleDbParameter("@sopriceDP", mainDatatable.Rows(i)("sopriceDP")))
                    ocmd.Parameters.Add(New OleDbParameter("@pother4", mainDatatable.Rows(i)("pother4")))
                    ocmd.Parameters.Add(New OleDbParameter("@usedsuppliermargin", mainDatatable.Rows(i)("usedsuppliermargin")))
                    ocmd.Parameters.Add(New OleDbParameter("@cimageurl", mainDatatable.Rows(i)("cimageurl")))
                    ocmd.Parameters.Add(New OleDbParameter("@ccategory", mainDatatable.Rows(i)("ccategory")))
                    ocmd.Parameters.Add(New OleDbParameter("@pricetaggroup", mainDatatable.Rows(i)("pricetaggroup")))
                    ocmd.Parameters.Add(New OleDbParameter("@spricemargingroup", mainDatatable.Rows(i)("spricemargingroup")))

                    ocmd.ExecuteNonQuery()
                    ocmd.Parameters.Clear()

                Next
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-14 10:50:48

必须添加参数的应该是ocmd,而不是cmd

代码语言:javascript
复制
ocmd.Parameters.Add(New OleDbParameter("@s....

还有一件事,您必须在ExecuteNonQuery之后清除参数

代码语言:javascript
复制
For i = 0 To mainDatatable.Rows.Count - 1
    ocmd.Parameters.Add(New OleDbParameter("@s....
    ....

    ocmd.ExecuteNonQuery()
    ocmd.Parameters.Clear()
Next
票数 1
EN

Stack Overflow用户

发布于 2012-09-14 11:15:48

我不知道它是如何工作的,如果你像问题中那样留下它,看看这一行

代码语言:javascript
复制
  cmd.Parameters.Add(New OleDbParameter("@sopriceDP", mainDatatable.Rows(i)("sopriceDP")))

并与命令进行比较

代码语言:javascript
复制
..@msprice, @minprice, @sopriceDB, @pother4,..

一个是@sopriceDP,另一个是@sopriceDB

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12417482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档