我想使用以下代码在sql表中写入数据然后我收到错误。
当我查看我的Visual Studio时,我可以看到@ p1等中有数据......
SqlCommand send = new SqlCommand("INSERT INTO test(code,type,datum,uur,controller,fout,teller,omschrijving,graad,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10,var11,var12,var13,var14,var15,var16,var17,var18,var19,var20,var21,var22,var23,var24,var25,var26,var27,var28,var29,var30,var31,var32,var33,var34,var35,var36,var37,var38,var39,var40)" + "values (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19,@p20,@p21,@p22,@p23,@p24,@p25,@p26,@p27,@p28,@p29,@p30,@p31,@p32,@p33,@p34,@p35,@p36,@p37,@p38,@p39,@p40,@p41,@p42,@p43,@p44,@p45,@p46,@p47,@p48,@p49)", connection);
while (foutinformatie[0, lusteller] != null) //zolang uitvoeren als er data is
{
//rij per rij in tabel plaatsensd
key = foutinformatie[0, lusteller] + "/" + foutinformatie[1, lusteller] + "/" + foutinformatie[2, lusteller] + "/" + foutinformatie[3, lusteller] + "/" + foutinformatie[4, lusteller];
send.Parameters.Clear();
SqlParameter myParam1 = new SqlParameter("@p1", SqlDbType.Text);
myParam1.Value = key;
SqlParameter myParam2 = new SqlParameter("@p2", SqlDbType.Text);
myParam2.Value = foutinformatie[0, lusteller];
SqlParameter myParam3 = new SqlParameter("@p3", SqlDbType.Text);
myParam3.Value = foutinformatie[1, lusteller];
SqlParameter myParam4 = new SqlParameter("@p4", SqlDbType.Text);
myParam4.Value = foutinformatie[2, lusteller];
SqlParameter myParam5 = new SqlParameter("@p5", SqlDbType.Text);
myParam5.Value = foutinformatie[3, lusteller];
SqlParameter myParam6 = new SqlParameter("@p6", SqlDbType.Text);
myParam6.Value = foutinformatie[4, lusteller];
SqlParameter myParam7 = new SqlParameter("@p7", SqlDbType.Text);
myParam7.Value = foutinformatie[5, lusteller];
SqlParameter myParam8 = new SqlParameter("@p8", SqlDbType.Text);
myParam8.Value = foutinformatie[6, lusteller];
SqlParameter myParam9 = new SqlParameter("@p9", SqlDbType.Text);
myParam9.Value = foutinformatie[7, lusteller];
SqlParameter myParam10 = new SqlParameter("@p10", SqlDbType.Text);
myParam10.Value = foutinformatie[8, lusteller];
SqlParameter myParam11 = new SqlParameter("@p11", SqlDbType.Text);
myParam11.Value = foutinformatie[9, lusteller];
SqlParameter myParam12 = new SqlParameter("@p12", SqlDbType.Text);
myParam12.Value = foutinformatie[10, lusteller];
SqlParameter myParam13 = new SqlParameter("@p13", SqlDbType.Text);
myParam13.Value = foutinformatie[11, lusteller];
SqlParameter myParam14 = new SqlParameter("@p14", SqlDbType.Text);
myParam14.Value = foutinformatie[12, lusteller];
SqlParameter myParam15 = new SqlParameter("@p15", SqlDbType.Text);
myParam15.Value = foutinformatie[13, lusteller];
SqlParameter myParam16 = new SqlParameter("@p16", SqlDbType.Text);
myParam16.Value = foutinformatie[14, lusteller];
SqlParameter myParam17 = new SqlParameter("@p17", SqlDbType.Text);
myParam17.Value = foutinformatie[15, lusteller];
SqlParameter myParam18 = new SqlParameter("@p18", SqlDbType.Text);
myParam18.Value = foutinformatie[16, lusteller];
SqlParameter myParam19 = new SqlParameter("@p19", SqlDbType.Text);
myParam19.Value = foutinformatie[17, lusteller];
SqlParameter myParam20 = new SqlParameter("@p20", SqlDbType.Text);
myParam20.Value = foutinformatie[18, lusteller];
SqlParameter myParam21 = new SqlParameter("@p21", SqlDbType.Text);
myParam21.Value = foutinformatie[19, lusteller];
SqlParameter myParam22 = new SqlParameter("@p22", SqlDbType.Text);
myParam22.Value = foutinformatie[20, lusteller];
SqlParameter myParam23 = new SqlParameter("@p23", SqlDbType.Text);
myParam23.Value = foutinformatie[21, lusteller];
SqlParameter myParam24 = new SqlParameter("@p24", SqlDbType.Text);
myParam24.Value = foutinformatie[22, lusteller];
SqlParameter myParam25 = new SqlParameter("@p25", SqlDbType.Text);
myParam25.Value = foutinformatie[23, lusteller];
SqlParameter myParam26 = new SqlParameter("@p26", SqlDbType.Text);
myParam26.Value = foutinformatie[24, lusteller];
SqlParameter myParam27 = new SqlParameter("@p27", SqlDbType.Text);
myParam27.Value = foutinformatie[25, lusteller];
SqlParameter myParam28 = new SqlParameter("@p28", SqlDbType.Text);
myParam28.Value = foutinformatie[26, lusteller];
SqlParameter myParam29 = new SqlParameter("@p29", SqlDbType.Text);
myParam29.Value = foutinformatie[27, lusteller];
SqlParameter myParam30 = new SqlParameter("@p30", SqlDbType.Text);
myParam30.Value = foutinformatie[28, lusteller];
SqlParameter myParam31 = new SqlParameter("@p31", SqlDbType.Text);
myParam31.Value = foutinformatie[29, lusteller];
SqlParameter myParam32 = new SqlParameter("@p32", SqlDbType.Text);
myParam32.Value = foutinformatie[30, lusteller];
SqlParameter myParam33 = new SqlParameter("@p33", SqlDbType.Text);
myParam33.Value = foutinformatie[31, lusteller];
SqlParameter myParam34 = new SqlParameter("@p34", SqlDbType.Text);
myParam34.Value = foutinformatie[32, lusteller];
SqlParameter myParam35 = new SqlParameter("@p35", SqlDbType.Text);
myParam35.Value = foutinformatie[33, lusteller];
SqlParameter myParam36 = new SqlParameter("@p36", SqlDbType.Text);
myParam36.Value = foutinformatie[34, lusteller];
SqlParameter myParam37 = new SqlParameter("@p37", SqlDbType.Text);
myParam37.Value = foutinformatie[35, lusteller];
SqlParameter myParam38 = new SqlParameter("@p38", SqlDbType.Text);
myParam38.Value = foutinformatie[36, lusteller];
SqlParameter myParam39 = new SqlParameter("@p39", SqlDbType.Text);
myParam39.Value = foutinformatie[37, lusteller];
SqlParameter myParam40 = new SqlParameter("@p40", SqlDbType.Text);
myParam40.Value = foutinformatie[38, lusteller];
SqlParameter myParam41 = new SqlParameter("@p41", SqlDbType.Text);
myParam41.Value = foutinformatie[39, lusteller];
SqlParameter myParam42 = new SqlParameter("@p42", SqlDbType.Text);
myParam42.Value = foutinformatie[40, lusteller];
SqlParameter myParam43 = new SqlParameter("@p43", SqlDbType.Text);
myParam43.Value = foutinformatie[41, lusteller];
SqlParameter myParam44 = new SqlParameter("@p44", SqlDbType.Text);
myParam44.Value = foutinformatie[42, lusteller];
SqlParameter myParam45 = new SqlParameter("@p45", SqlDbType.Text);
myParam45.Value = foutinformatie[43, lusteller];
SqlParameter myParam46 = new SqlParameter("@p46", SqlDbType.Text);
myParam46.Value = foutinformatie[44, lusteller];
SqlParameter myParam47 = new SqlParameter("@p47", SqlDbType.Text);
myParam47.Value = foutinformatie[45, lusteller];
SqlParameter myParam48 = new SqlParameter("@p48", SqlDbType.Text);
myParam48.Value = foutinformatie[46, lusteller];
SqlParameter myParam49 = new SqlParameter("@p49", SqlDbType.Text);
myParam49.Value = foutinformatie[47, lusteller];
send.Parameters.Add(myParam1);
send.Parameters.Add(myParam2);
send.Parameters.Add(myParam3);
send.Parameters.Add(myParam4);
send.Parameters.Add(myParam5);
send.Parameters.Add(myParam6);
send.Parameters.Add(myParam7);
send.Parameters.Add(myParam8);
send.Parameters.Add(myParam9);
send.Parameters.Add(myParam10);
send.Parameters.Add(myParam11);
send.Parameters.Add(myParam12);
send.Parameters.Add(myParam13);
send.Parameters.Add(myParam14);
send.Parameters.Add(myParam15);
send.Parameters.Add(myParam16);
send.Parameters.Add(myParam17);
send.Parameters.Add(myParam18);
send.Parameters.Add(myParam19);
send.Parameters.Add(myParam20);
send.Parameters.Add(myParam21);
send.Parameters.Add(myParam22);
send.Parameters.Add(myParam23);
send.Parameters.Add(myParam24);
send.Parameters.Add(myParam25);
send.Parameters.Add(myParam26);
send.Parameters.Add(myParam27);
send.Parameters.Add(myParam28);
send.Parameters.Add(myParam29);
send.Parameters.Add(myParam30);
send.Parameters.Add(myParam31);
send.Parameters.Add(myParam32);
send.Parameters.Add(myParam33);
send.Parameters.Add(myParam34);
send.Parameters.Add(myParam35);
send.Parameters.Add(myParam36);
send.Parameters.Add(myParam37);
send.Parameters.Add(myParam38);
send.Parameters.Add(myParam39);
send.Parameters.Add(myParam40);
send.Parameters.Add(myParam41);
send.Parameters.Add(myParam42);
send.Parameters.Add(myParam43);
send.Parameters.Add(myParam44);
send.Parameters.Add(myParam45);
send.Parameters.Add(myParam46);
send.Parameters.Add(myParam47);
send.Parameters.Add(myParam48);
send.Parameters.Add(myParam49);
try
{
int pos = Array.IndexOf(keys, key);
if (pos == -1)
{
connection.Open();
send.ExecuteNonQuery();
connection.Close();
}
else
{
}
}
catch
{
connection.Close();
// MessageBox.Show("Can not open connection ! ");
}
lusteller = lusteller + 1;
}
}
错误:
参数化查询'(@ p1 text,@ p2 text,@ p3 text,@ p4 text,@ p5 text,@ p6 text,@ p7 text,'需要参数'@ p9',这是未提供的。
答案 0 :(得分:0)
您的数据库中是否有可为空的列?这可能是问题所在。如果值为null,则必须显式传递DBNull.Value。如果不这样做,则可能无法正确识别参数并报告为缺失。您可以执行以下任务:
myParamX.Value = foutinformatie[0, lusteller] ?? DBNull.Value;
我还强烈建议您以更有效的方式创建参数。首先,在执行命令之前为命令ONCE创建所有参数并调用send.Prepare()
。
比在循环中设置每行的值并执行命令。这样效率更高。
connection.Open();
SqlCommand send = new SqlCommand(
"INSERT INTO test(code,type,datum,uur,controller,fout,teller,omschrijving,graad,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10,var11,var12,var13,var14,var15,var16,var17,var18,var19,var20,var21,var22,var23,var24,var25,var26,var27,var28,var29,var30,var31,var32,var33,var34,var35,var36,var37,var38,var39,var40)" +
"values (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19,@p20,@p21,@p22,@p23,@p24,@p25,@p26,@p27,@p28,@p29,@p30,@p31,@p32,@p33,@p34,@p35,@p36,@p37,@p38,@p39,@p40,@p41,@p42,@p43,@p44,@p45,@p46,@p47,@p48,@p49)",
connection);
for (int i = 1; i <= 49; i++)
{
send.Parameters.Add("@p" + i, SqlDbType.Text);
}
// prepare command (see documentation)
send.Prepare();
//zolang uitvoeren als er data is
while (foutinformatie[0, lusteller] != null)
{
//rij per rij in tabel plaatsensd
key = foutinformatie[0, lusteller] + "/" +
foutinformatie[1, lusteller] + "/" +
foutinformatie[2, lusteller] + "/" +
foutinformatie[3, lusteller] + "/" +
foutinformatie[4, lusteller];
send.Parameters[0].Value = key;
// assign values in a loop with regarding DBNull
for (int i = 1; i < 49; i++)
{
send.Parameters[i].Value = foutinformatie[i-1, lusteller] ?? DBNull.Value;
}
send.ExecuteNonQuery();
lusteller = lusteller + 1;
}
我没有运行此代码,可能还有一些索引偏移问题。它应该只展示如何解决这个更优雅。