c# - System.Data.OleDb.OleDbException : Syntax error in INSERT INTO statement

标签 c# asp.net sql oledb

    public void RegisterUser(string passw,string uname ,string fname ,string lname, string email)
{
    string strSql = @"INSERT INTO User (passw,uname,fname,lname,email) values ('" + passw + "','" + uname + "','" + fname + "','" + lname + "','" + email + "')";                                                           
    cn.Open();
    OleDbCommand cmd = new OleDbCommand(strSql,cn);
    int yy= cmd.ExecuteNonQuery();
    cn.Close();
    cn.Dispose();

}

不管我做什么,我都会得到同样的错误
有人看到这里有问题吗?
或者有另一种创造性的方法来解决这个问题
谢谢

最佳答案

您的代码可以根据用户输入动态更改。这就是导致错误的原因。

让我解释一下您的任何输入字段是否包含撇号 [ ' ] sql 会中断并且现在有一个未闭合的引号。

不仅如此,它还将您的代码暴露给 SQL 注入(inject)攻击 .

所以我建议你使用参数 将值作为参数传递会被区别对待,并且是安全的,并且可以防止 SQL 注入(inject)。

    public void RegisterUser(string passw,string uname ,string fname ,string lname, string email)
{
    string strSql = @"INSERT INTO User (passw,uname,fname,lname,email) values     (@passw,@uname,@fname,@lname,@email)";                                                           
    cn.Open();
    OleDbCommand cmd = new OleDbCommand(strSql,cn);
    cmd.Parameters.AddWithValue("@passw",passw);
    cmd.Parameters.AddWithValue("@uname",uname);
    cmd.Parameters.AddWithValue("@fname",fname);
    cmd.Parameters.AddWithValue("@lname",lname);
    cmd.Parameters.AddWithValue("@email",email);
    int yy= cmd.ExecuteNonQuery();
    cn.Close();
    cn.Dispose();
}

关于c# - System.Data.OleDb.OleDbException : Syntax error in INSERT INTO statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237780/

相关文章:

mysql - 如何按INNER JOIN的列排序

MySQL 当前日期

c# - 在打开的DataReader中执行另一个MySQL语句

c# - 是否有使用 Java、C#、Python 或 Ruby 编写的 Google Contacts API 的 Hello World 示例?

c# - 是否可以在共享托管服务器中使用 `ffmpeg.exe`?

asp.net - 电子邮件 token 在15分钟后过期-Asp Identity 2.0 API

c# - 什么是 System.Web.Hosting 的 Nuget 包

c# - 如何在 View 中设置通用模型?

c# - 检测何时即将耗尽内存(获取 "free physical memory"的数量)

c# - dotnet-test 可以指定运行时标识符吗?