【发布时间】: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