我试图在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();
答案 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();