【问题标题】:"insert into" accdb from c#从c#“插入”accdb
【发布时间】:2015-02-04 20:34:22
【问题描述】:

我在 c# 中编写了这两个代码来在访问 accdb 的一行中写一些东西,但它们不能同时工作:

String tableName = "ARE";
                String query = String.Format(
                              "select * from [{0}]", tableName);
                DataSet ds = new DataSet();
                using (OleDbConnection conn =
                      new OleDbConnection(connection_string))
                {
                    try
                    {
                        //Open Database Connection
                        conn.Open();
                        OleDbDataAdapter da =
                               new OleDbDataAdapter(query, conn);
                        OleDbCommandBuilder cmdB =
                               new OleDbCommandBuilder(da);
                        da.MissingSchemaAction =
                               MissingSchemaAction.AddWithKey;

                        //Fill the DataSet
                        da.Fill(ds, tableName);

                        DataRow row = ds.Tables["ARE"].NewRow();
                        row["ID"] = "1";
                        row["Localizzazione"] = "1";
                        row["UO"] = "UO1";
                        row["Coordinate"] = "333;336";

                        ds.Tables["ARE"].Rows.Add(row);
                        da.Update(ds, "ARE");

                    }
                    catch (OleDbException exp)
                    {
                        MessageBox.Show("Database Error:" + exp.Message.ToString());
                    }

 using (OleDbConnection oc = new OleDbConnection(connection_string))
                {

                    string q = "INSERT INTO ARE "
                                + "(ID, Localizzazione, UO, Coordinate) "
                                + "VALUES (@ID, @Localizzazione, @UO, @Coordinate)";

                    OleDbCommand insertCommand = new OleDbCommand(q, oc);

                    insertCommand.Parameters.Add("@ID", OleDbType.Integer).Value = 1;
                    insertCommand.Parameters.Add("@Localizzazione", OleDbType.Integer).Value = 1;
                    insertCommand.Parameters.Add("@UO", OleDbType.Char).Value = (UO[selectedUO])[1].ToString();
                    insertCommand.Parameters.Add("@Coordinate", OleDbType.Char).Value = (e.X - 12) + ";" + (e.Y - 12);

                    oc.Open();
                    insertCommand.ExecuteNonQuery();

                }

但总是告诉我“关于结构 INSERT INTO 的错误语法”。 System.Data.OleDb.OleDbException

为什么??? :(

【问题讨论】:

  • 你有一个 SQL 注入漏洞。
  • @SLaks 感谢您的帮助,但我不太明白这意味着什么……您能给我举个例子或解决方案吗?
  • 如果您将表名括起来,您的第二个示例是否有效? INSERT INTO [ARE]如果不起作用,您会收到不同的错误消息吗?
  • 我不确定 Access 数据库,但一般来说你不应该使用分号作为分隔符。我建议将坐标存储为两个单独的列,但请尝试手动插入,例如 Insert into ARE(ID,Localizzazione, UO,Coordinate) values(1,1,'1','1');
  • "插入 ARE(ID,Localizzazione, UO,Coordinate) values(1,1,'UO4','1')" 再次给我错误

标签: c# ms-access insert-into


【解决方案1】:

根据Microsoft,'ARE' 是 Jet DB 引擎的保留关键字。你现在可以使用方括号来解决这个问题(比如INSERT INTO [ARE],但你真的应该考虑更改表名。

【讨论】:

    【解决方案2】:

    为什么要先声明字符串 q,然后再声明字符串 q?看起来你的 sql 写的不正确.. 空格、大写等等。

    【讨论】:

    • 我写了两次 string q 错误,在测试中我尝试了互相评论。有什么解决办法吗?
    • 对不起,回车键一直让我着迷。您确定所有表格和列都拼写正确吗?代码看起来正确。
    猜你喜欢
    • 2011-06-07
    • 2021-09-06
    • 1970-01-01
    • 2023-04-10
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多