How*_*ard 1 c# oledb ms-access syntax-error sql-insert
当我尝试将值插入Access数据库时,我一直收到错误.
错误是语法错误,导致以下异常:
INSERT INTO语句中的OleDbException未处理语法错误.
private OleDbConnection myCon;
public Form1()
{
InitializeComponent();
myCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\File.mdb");
}
private void insertuser_Click(object sender, EventArgs e)
{
OleDbCommand cmd = new OleDbCommand();
myCon.Open();
cmd.Connection = myCon;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO User ([UserID], [Forename], [Surname], " +
"[DateOfBirth], [TargetWeight], [TargetCalories], [Height]) " +
"VALUES ('" + userid.Text.ToString() + "' , '" +
fname.Text.ToString() + "' , '" +
sname.Text.ToString() + "' , '" +
dob.Text.ToString() + "' , '" +
tarweight.Text.ToString() + "' , '" +
tarcal.Text.ToString() + "' , '" +
height.Text.ToString() + "')";
cmd.ExecuteNonQuery();
myCon.Close();
}
Run Code Online (Sandbox Code Playgroud)
好吧,您还没有指定错误是什么 - 但您的第一个问题是您将数据直接插入SQL语句.不要那样做.您正在邀请SQL注入攻击.
请改用参数化的SQL语句.完成后,如果仍有问题,请使用新代码编辑此问题并说明错误是什么.新代码可能已经更加清晰,因为不会涉及巨大的连接,容易隐藏类似不匹配的括号.
编辑:正如评论中所提到的,Jet/ACE容易受到较少类型的SQL注入攻击,因为它不允许使用DML.对于这个INSERT语句,实际上可能没有漏洞 - 但对于具有以类似方式编写的WHERE子句的SELECT,用户输入可以绕过WHERE子句的一些保护.我强烈建议您使用参数化查询作为理所当然的事情:
(你也并不需要所有的通话ToString,不仅我期望一个名为属性Text是已经一个字符串,但事实上,你使用字符串连接意味着字符串转换无论如何都会自动发生.)
| 归档时间: |
|
| 查看次数: |
23608 次 |
| 最近记录: |