SQL INSERT失败,我无法找到问题

时间:2015-02-12 13:16:32

标签: c# sql parameters insert

我试图在SQL服务器中插入一些内容(使用c#),当我尝试它时,它需要(在查询中)给定参数并且在声明时无法找到它

"附加信息:参数化查询'(@ art varchar(8000),@ oms varchar(8000),@ rem varchar(8000),@ artdk'需要参数&#39 ; @ art',未提供。" 我检查了参数数量,数据库连接,我试图使用另一个插入命令,我有作为reffrence但我无法让它工作。而我在互联网上找不到同样的问题。如果有人可以帮助我,那将会变得非常有用。

更新: 我将artnr.selectedvalue改为artnr.text,这让我有了一些进步,但现在我得到了这个错误

UPDATE2: 似乎如果我填充它试图插入的每个框都有效..但它确实在所有数据库单元格中都允许null,因此找到了问题。只是想解决一个(不能)空了。

  

类型' System.Data.SqlClient.SqlException'未处理的异常发生在System.Data.dll

中      

其他信息:将数据类型varchar转换为数字时出错。

当我输入所有数字或所有文本时,它会出现此错误

SqlCommand slinkoopadd = new SqlCommand(@"insert into ART (ART ,OMS ,REM ,ARTDK ,TYPE ,MAG ,PROGRAM ,EH1 ,LEV ,LTD ,INK ,KOR ,SGR ,EH2 ,EF ,VALUTA ,CRNI )
                                                   values (@art,@oms,@rem,@artdk,@type,@mag,@program,@eh1,@lev,@ltd,@ink,@kor,@sgr,@eh2,@ef,@valuta,@crni);", Connectie.connMEVO_ART);
        #region parameters
        slinkoopadd.Parameters.Add("@art", SqlDbType.VarChar).Value = this.artnr.SelectedValue;
        slinkoopadd.Parameters.Add("@oms", SqlDbType.VarChar).Value = this.tekstinkoopoms.Text;
        slinkoopadd.Parameters.Add("@rem", SqlDbType.VarChar).Value = this.tekstinkoopopmerk.Text;
        slinkoopadd.Parameters.Add("@artdk", SqlDbType.VarChar).Value = this.tekstinkoopnummerlev.Text;
        slinkoopadd.Parameters.Add("@type", SqlDbType.VarChar).Value = this.tekstinkooparttype.Text;
        slinkoopadd.Parameters.Add("@mag", SqlDbType.VarChar).Value = this.tekstinkoopmagazijnloc.Text;
        slinkoopadd.Parameters.Add("@program", SqlDbType.VarChar).Value = this.tekstinkoopinternopmerk.Text;
        slinkoopadd.Parameters.Add("@eh1", SqlDbType.VarChar).Value = this.tekstinkoopeenheid.Text;
        slinkoopadd.Parameters.Add("@lev", SqlDbType.VarChar).Value = this.tekstinkoopstandleveran.Text;
        slinkoopadd.Parameters.Add("@ltd", SqlDbType.VarChar).Value = this.tekstinkooplevertijd.Text;
        slinkoopadd.Parameters.Add("@ink", SqlDbType.VarChar).Value = this.tekstinkoopbrutoprijs.Text;
        slinkoopadd.Parameters.Add("@kor", SqlDbType.VarChar).Value = this.tekstinkoopkorting.Text;
        slinkoopadd.Parameters.Add("@sgr", SqlDbType.VarChar).Value = this.tekstinkoopserievoorraad.Text;
        slinkoopadd.Parameters.Add("@eh2", SqlDbType.VarChar).Value = this.tekstinkoopgebruikeh.Text;
        slinkoopadd.Parameters.Add("@ef", SqlDbType.VarChar).Value = this.textinkoopehfactor.Text;
        //slinkoopadd.Parameters.Add("@", SqlDbType.VarChar).Value = this.artnr.Text;//perc. voor vracht
        slinkoopadd.Parameters.Add("@valuta", SqlDbType.VarChar).Value = this.tekstinkoopvaluta.Text;
        slinkoopadd.Parameters.Add("@crni", SqlDbType.VarChar).Value = this.tekstinkoopcrni.Text;
        //slinkoopadd.Parameters.Add("@", SqlDbType.VarChar).Value = this.artnr.Text;//extra kosten
        //slinkoopadd.Parameters.Add("@", SqlDbType.VarChar).Value = this.artnr.Text;//bestelgrootte afroep
        //slinkoopadd.Parameters.Add("@", SqlDbType.VarChar).Value = this.artnr.Text;//prognose jaarverbruik
        //slinkoopadd.Parameters.Add("@", SqlDbType.VarChar).Value = this.artnr.Text;//levertijd nieuwe afr
        #endregion
        drART = slinkoopadd.ExecuteReader();
        MessageBox.Show("Opgeslagen!");
        fillbox();
        while (drART.Read())
        { }
        slinkoopadd.Dispose();

3 个答案:

答案 0 :(得分:1)

试试这样吗?

slinkoopadd.Parameters.Add("@art", SqlDbType.VarChar);
slinkoopadd.Parameters["@art"].Value = this.artnr.SelectedValue;

我不确定你能不能像这样管它。

答案 1 :(得分:0)

drART = slinkoopadd.ExecuteReader();

你不希望的东西。您想插入,这不是查询:

var result = slinkoopadd.ExecuteNonQuery();

答案 2 :(得分:0)

我在查询中更改了一些小东西,我确保一些文本框得到一个默认值,如果它没有任何东西,所以现在它的工作原理。这是当前有效的查询。

if (tekstinkoopcrni.Text == "1") { } else if (tekstinkoopcrni.Text == "0") { } 
else { tekstinkoopcrni.Text = "0"; }
if (tekstinkoopkorting.Text == "") { tekstinkoopkorting.Text = "0"; }
if (tekstinkoopserievoorraad.Text == "") { tekstinkoopserievoorraad.Text = "0"; }
if (tekstinkoopstandleveran.Text == "") { tekstinkoopstandleveran.Text = "9999"; }
if (tekstinkooplevertijd.Text == "") { tekstinkooplevertijd.Text = "0"; }

SqlCommand slinkoopadd = new SqlCommand(@"insert into ART (ART ,OMS ,REM ,ARTDK ,TYPE ,
MAG ,PROGRAM ,EH1 ,INK ,KOR ,SGR ,EH2 ,EF ,VALUTA ,CRNI  ,LEV ,LTD )
values (@art,@oms,@rem,@artdk,@type,@mag,@program,@eh1,@ink,@kor,@sgr,@eh2,@ef,
@valuta,@crni, @lev,@ltd);", Connectie.connMEVO_ART);                                   

#region parameters
slinkoopadd.Parameters.Add("@art", SqlDbType.VarChar).Value = this.artnr.Text;
slinkoopadd.Parameters.Add("@oms", SqlDbType.VarChar).Value = this.tekstinkoopoms.Text;
slinkoopadd.Parameters.Add("@rem", SqlDbType.VarChar).Value = this.tekstinkoopopmerk.Text;
slinkoopadd.Parameters.Add("@artdk", SqlDbType.VarChar).Value = this.tekstinkoopnummerlev.Text;
slinkoopadd.Parameters.Add("@type", SqlDbType.VarChar).Value = this.tekstinkooparttype.Text;
slinkoopadd.Parameters.Add("@mag", SqlDbType.VarChar).Value = this.tekstinkoopmagazijnloc.Text;
slinkoopadd.Parameters.Add("@program", SqlDbType.VarChar).Value = this.tekstinkoopinternopmerk.Text;
slinkoopadd.Parameters.Add("@eh1", SqlDbType.VarChar).Value = this.tekstinkoopeenheid.Text;
slinkoopadd.Parameters.Add("@lev", SqlDbType.VarChar).Value = this.tekstinkoopstandleveran.Text;
slinkoopadd.Parameters.Add("@ltd", SqlDbType.VarChar).Value = this.tekstinkooplevertijd.Text;
slinkoopadd.Parameters.Add("@ink", SqlDbType.VarChar).Value = this.tekstinkoopbrutoprijs.Text;
slinkoopadd.Parameters.Add("@kor", SqlDbType.VarChar).Value = this.tekstinkoopkorting.Text;
slinkoopadd.Parameters.Add("@sgr", SqlDbType.VarChar).Value = this.tekstinkoopserievoorraad.Text;
slinkoopadd.Parameters.Add("@eh2", SqlDbType.VarChar).Value = this.tekstinkoopgebruikeh.Text;
slinkoopadd.Parameters.Add("@ef", SqlDbType.VarChar).Value = this.textinkoopehfactor.Text;
slinkoopadd.Parameters.Add("@valuta", SqlDbType.VarChar).Value = this.tekstinkoopvaluta.Text;
slinkoopadd.Parameters.Add("@crni", SqlDbType.VarChar).Value = this.tekstinkoopcrni.Text;
#endregion
drART = slinkoopadd.ExecuteReader();
MessageBox.Show("Artikel opgeslagen!");
fillbox();
while (drART.Read())
{ }
slinkoopadd.Dispose();