c#访问INSERT INTO查询无法正常工作

时间:2015-12-23 18:21:29

标签: c# database visual-studio visual-studio-2013 ms-access-2010

我正在尝试将c#中的文本框的值输入到我访问过的数据库中的字段中。出于某种原因,我不断收到错误说:

'未处理的类型' System.Data.OleDb.OleDbException'发生在System.Data.dll

其他信息:INSERT INTO语句中的语法错误。'

不能完全看出错误,这是我第一次尝试在项目中这样做,所以我对它不太熟悉。这是我的代码:

OleDbConnection connection = new OleDbConnection(CONNECTION STRING GOES HERE);

connection.Open();

string playerName = textBox[i].Text;
string query = "INSERT INTO (TotalPlayerName)(Player Name) VALUES(" + playerName + ")";
OleDbCommand command = new OleDbCommand(query, connection);

command.ExecuteNonQuery();

如果它有帮助那么数据库就会被调用'数据库'该表名为' TotalPlayerName'该字段被称为'玩家姓名'

1 个答案:

答案 0 :(得分:3)

执行任务的正确代码是

string cmdText = "INSERT INTO TotalPlayerName ([Player Name]) VALUES(?)";

using(OleDbConnection connection = new OleDbConnection(...))
using(OleDbCommand command = new OleDbCommand(cmdText, connection))
{
   connection.Open();
   command.Parameters.Add("@p1", OleDbType.VarWChar).Value = textBox[i].Text;
   int result = command.ExecuteNonQuery();
   if(result > 0)
      MessageBox.Show("Record Inserted");
   else
      MessageBox.Show("Failure to insert");
}

这种方法解决了三个问题:

  • 连接和命令对象应放在最后 (见使用声明)
  • 您需要传递给查询的每个值都应该作为传递 参数
  • 如果字段名称(或表名称)包含嵌入的空格,则应将其括起来 它在方括号之间

(ExecuteNonQuery下面的消息仅作为检查ExecuteNonQuery返回值的示例)
还要记住,如果您的表具有多个此字段且某些其他字段不接受空值,则还应为它们提供一些值。 例如

string cmdText = @"INSERT INTO TotalPlayerName ([Player Name], FieldB) 
                 VALUES(?, ?)";

command.Parameters.Add("@p1", OleDbType.VarWChar).Value = textBox[i].Text;
command.Parameters.Add("@p2", OleDbType.VarWChar).Value = "ValueForFieldB";

请记得严格按照顺序排列?添加参数值时