OleDB中插入命令错误

本文关键字:错误 命令 插入 OleDB | 更新日期: 2023-09-27 18:11:58

小菜鸟说HY。我在Microsoft Visual Studio 2010中的一个家庭作业项目中遇到了一个小问题。另外,我用c#工作。我必须做一个网站销售产品,我有一个访问数据库。所以,问题是这样的:我写的代码,但它似乎是错误的,我不知道什么!当我尝试按站点添加命令时,我收到一个错误:

标准表达式中的数据类型不匹配。

代码是:

string date = DateTime.Now.ToShortDateString();
string string_baza_de_date = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:'Users'BogCs'Documents'Visual Studio 2010'WebSites'WebSite1'App_Data'magazin.mdb";
OleDbConnection ConexiuneSQL = new OleDbConnection(string_baza_de_date);
ConexiuneSQL.Open();
int numar_total_de_produse = CheckBoxList1.Items.Count; //  se numara produsele
for (int i = 0; i < numar_total_de_produse; i++) // de la primul articol din CheckBoxList1 pana la ultimul
{
    if (CheckBoxList1.Items[i].Selected == true) // daca am selectat un produs
    {
        // interogarea comenzii:
        string interogare_adauga_comanda = "INSERT INTO comanda_finala (ID_comanda, ID_client, ID_produs, produs, tip_produs,  data_comanda, pret) VALUES ("
        + TextBox1.Text + ",'" + TextBox2.Text + "',"
        + CheckBoxList1.Items[i].Value + ",'" + CheckBoxList1.Items[i].Text + "', 'Televizoare LED','"
        + data_curenta + "','" + GridView3.Rows[i].Cells[3].Text.ToString() + "');";
        OleDbCommand comanda_inserare_comanda = new OleDbCommand(interogare_adauga_comanda, ConexiuneSQL);
        comanda_inserare_comanda.ExecuteNonQuery(); 
    }
}
ConexiuneSQL.Close();
GridView3.Visible = false;
Button1.Visible = false;
Button2.Visible = false;
CheckBoxList1.Visible = false;
Label1.Visible = false;
TextBox1.Visible = false;
Label2.Visible = true;

当我按"添加命令"给我这个错误,我不知道如何解决!

OleDB中插入命令错误

你必须在textbox1.text前后加上" ' "所以它看起来像这样:

 string interogare_adauga_comanda = "INSERT INTO comanda_finala (ID_comanda, ID_client, ID_produs, produs, tip_produs,  data_comanda, pret) VALUES ('" + TextBox1.Text + "','" + TextBox2.Text + "', " + CheckBoxList1.Items[i].Value + ",'" + CheckBoxList1.Items[i].Text + "', 'Televizoare LED','"+ data_curenta + "','" + GridView3.Rows[i].Cells[3].Text.ToString()+ "');";

可能错误出在你用来构建命令的一些字符串上。
通常,这是使用参数化查询的第一个明显原因。
让框架代码根据当前数据库的规则格式化字符串。

然而,最重要的原因是Sql注入问题

让我这样修改一下你的代码来去掉难看的字符串连接

 string interogare_adauga_comanda = "INSERT INTO comanda_finala (ID_comanda, ID_client, "+ 
                                    "ID_produs, produs, tip_produs,  data_comanda, pret) " + 
                                    "VALUES (?,?,?,?,?,?,?)";
 OleDbCommand comanda_inserare_comanda = new OleDbCommand(interogare_adauga_comanda, ConexiuneSQL);
 comanda_inserare_comanda.Parameters,AddWithValue("@p1",TextBox1.Text );
 comanda_inserare_comanda.Parameters,AddWithValue("@p2",TextBox2.Text );
 comanda_inserare_comanda.Parameters,AddWithValue("@p3",CheckBoxList1.Items[i].Value );
 comanda_inserare_comanda.Parameters,AddWithValue("@p4",CheckBoxList1.Items[i].Text );
 comanda_inserare_comanda.Parameters,AddWithValue("@p5","Televizoare LED");
 comanda_inserare_comanda.Parameters,AddWithValue("@p6",data_curenta);
 comanda_inserare_comanda.Parameters,AddWithValue("@p7",GridView3.Rows[i].Cells[3].Text.ToString());
 comanda_inserare_comanda.ExecuteNonQuery(); 

另外,请记住,您应该将值传递给数据库字段所期望的具有正确数据类型的参数。例如,如果您的第一个字段ID_comanda是数字,那么相对参数的行应该更改为

 comanda_inserare_comanda.Parameters,AddWithValue("@p1",Convert.ToInt32(TextBox1.Text));

,这引起了另一个问题。你检查过TextBox1中的文本是否真的是一个数字吗?