不能写有参数的sql表

本文关键字:sql 参数 不能 | 更新日期: 2023-09-27 18:09:42

我想用以下代码在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文本,@p2文本,@p3文本,@p4文本,@p5文本,@p6文本,@p7文本,'需要参数'@p9',但没有提供。

不能写有参数的sql表

您的数据库中有可空列吗?这可能就是问题所在。如果值为空,则必须显式地传递DBNull.Value。否则,该参数可能无法正确识别,并报告为缺失。你可以这样做:

myParamX.Value = foutinformatie[0, lusteller] ?? DBNull.Value;

我还强烈建议您以更有效的方式创建参数。首先,在执行命令并调用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;
}

我没有运行这段代码,也许还有一些索引偏移问题。它应该只演示如何更优雅地解决这个问题。