如何将值插入数据库(Microsoft 访问)?
Posted
技术标签:
【中文标题】如何将值插入数据库(Microsoft 访问)?【英文标题】:How to insert values into a database (Microsoft access)? 【发布时间】:2013-12-07 15:18:04 【问题描述】:我正在尝试将用户的详细信息插入到我的数据库中名为 user 的表中,但是我认为我编写负责执行此操作的查询的方式有问题。
这是我到目前为止所做的:
public static void addUser(string n, string s)
OleDbConnection myConnection = GetConnection();
string myQuery = "INSERT INTO user( Name, Surname) VALUES ( '" + n + " , " + s + "' )";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
try
myConnection.Open();
myCommand.ExecuteNonQuery();
catch (Exception ex)
Console.WriteLine("Exception in DBHandler", ex);
finally
myConnection.Close();
【问题讨论】:
您是否遇到任何异常或错误? 我是这么认为的,因为当我调试它时,它会尝试捕获异常并且不会将任何内容添加到数据库中。 使用@Soner Gönül 给出的答案 【参考方案1】:好吧,您没有告诉我们您是否收到任何错误,但使用 parameterized queries
始终是更好的选择。这种字符串连接对SQL Injection
攻击开放。
例如;
string myQuery = "INSERT INTO [user] ([Name], Surname) VALUES (@n, @s)";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
myCommand.Parameters.AddWithValue("@n", n);
myCommand.Parameters.AddWithValue("@s", s);
user
和 Name
在 MS Access 上也是 reserved keywords
。您应该将它们与方括号一起使用,例如 [user]
和 [Name]
。
作为一般建议,不要将保留关键字用于数据库中的标识符和对象名称。
【讨论】:
【参考方案2】:问题:您误用了单引号。
解决方案:您需要将VARCHAR
类型正确括在单引号中
试试这个:
string myQuery = "INSERT INTO [user] ([Name],Surname) VALUES ( '" + n + "' , '" + s + "' )";
我建议你使用Parameterised sql queries
来避免Sql Injection attacks
试试这个:使用参数化查询
string myQuery = "INSERT INTO [user]([Name], Surname) VALUES (@name,@surname)";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
myCommand.Parameters.AddWithValue("@name",n);
myCommand.Parameters.AddWithValue("@surname",s);
【讨论】:
【参考方案3】:你少了几个撇号。
你得到它的方式,不是传递两个参数(即'one'
和'two'
),而是传递一个参数(即'one , two'
)。
试试这个:
string myQuery
= "INSERT INTO user( Name, Surname) VALUES ( '" + n + "' , '" + s + "' )";
【讨论】:
【参考方案4】:问题是“用户”是 MS Access 的关键字。您必须将其放在尖括号中:[user]
。
HTH 托马斯
【讨论】:
以上是关于如何将值插入数据库(Microsoft 访问)?的主要内容,如果未能解决你的问题,请参考以下文章
使用窗体上的按钮将值插入Microsoft Access数据库