未知错误:提供给命令的参数不足

时间:2013-11-17 04:47:33

标签: c# sqlite

在C#项目中,我在我的表单中创建了一个datagridview,其中包含一些columns.column [0]&列[1]名称是固定的(日期和日期),其他列名称是可变的并且将由用户更改。这些列具有显示开始和结束时间的时间段。 例如从早上6点到下午14点显示为6_14列名称。我们有一个列表框,其中包含可变数量的项目(计数器“i”)。

///sqlite doesn't accept columns name that start and finish with Numbers.I added word "f" to start and end of each
///column name

string data_str = "";
string data_str2="";

for (int i = 0; i < listBox1.Items.Count;i++ )
{
    string temp = "f"+ listBox1.Items[i].ToString()+"f";
    data_str = data_str + temp +",";

    string temp2 =  "@"+listBox1.Items[i].ToString()+",";
    data_str2=data_str2+temp2;
}

data_str=data_str.TrimEnd(',');
data_str2=data_str2.TrimEnd(',');

在第一步中,我做了两列“日”&amp;我的数据库中的数据表中的“日期”并成功导入我的数据。(它可以工作)

string Q_insert = "insert into " + table_name + " (day,date) values (@day,@date)";
SQLiteConnection connect = new SQLiteConnection(connection_string);
SQLiteCommand insert_cmd = new SQLiteCommand(Q_insert, connect);
foreach (DataGridViewRow row in shift_datagrid.Rows)
{

    insert_cmd.Parameters.AddWithValue("@day", row.Cells[0].Value.ToString().Trim());
    insert_cmd.Parameters.AddWithValue("@date", row.Cells[1].Value.ToString().Trim());

    connect.Open();
    insert_cmd.ExecuteNonQuery();
    connect.Close();
}

在第二步中,我需要将用户数据从datagridview导入数据表,但是会发生错误。(它不起作用)

int col_cnt = listBox1.Items.Count;

Q_insert = "insert into " + table_name + " (" + data_str + ") values (" + data_str2 + ")";
connect = new SQLiteConnection(connection_string);
insert_cmd = new SQLiteCommand(Q_insert, connect);

foreach (DataGridViewRow row in shift_datagrid.Rows)
{

    string temp1 = "";
    for (int i = 0; i < col_cnt; i++)
    {           
        temp1 = "\"@" + listBox1.Items[i].ToString() +"\"";
        insert_cmd.Parameters.AddWithValue(temp1, row.Cells[i + 2].Value.ToString().Trim()); 
    }

    connect.Open();
    insert_cmd.ExecuteNonQuery();
    connect.Close();       
}

遗憾的是,发生此错误: 未知错误:Insufficient parameters supplied to the command 我搜索了这个错误,并检查了相同问题的解决方法,但它们对我的问题无用,无论如何它们无法帮助我。

这是将数据插入数据库的输出命令字符串的示例(两步):
1。插入[table_name](日期,日期)值(@ day,@ date)--------------&gt;(工作正常)
2。插入[table_name](f6_14f,f14_22f,f22_6f)值(@ 6_14,@ 14_22,@ 22_6)-------&gt;(它不起作用)

请帮帮我 感谢

1 个答案:

答案 0 :(得分:1)

以下情况可能导致错误:

temp1 = "\"@" + listBox1.Items[i].ToString() +"\"";
insert_cmd.Parameters.AddWithValue(temp1, row.Cells[i + 2].Value.ToString().Trim());

语法要求您不要将@构造为变量值的一部分。@不是数据。像以前一样使用它作为变量名的一部分:

insert_cmd.Parameters.AddWithValue("@Col1",listBox1.Items[i+2].Value.ToString().Trim());

其中@ Col1是表格的列名。

我认为您不能在for循环中构建参数名称,如果是这样,您必须列出每个列名参数的insert语句,前缀为@,如上例/代码中所示。