c# - 系统.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# - 系统.Data.OleDb.OleDbException : Syntax error in INSERT INTO statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237780/

相关文章:

c# - 如何让 asp.net mvc 复选框触发一个 Action ?

c# - 如何计算两个整数的相似度?

c# - 内存快照触发dotMemory中的Garbage collection

asp.net - Stack Overflow 的迷你分析器

asp.net - 如何在Redis中进行包含搜索?

c# - 可以在 IIS 中对静态 html 页面进行后处理吗?

c# - 在 UI 线程中修改 ObservableCollection 会导致错误,即使在使用 UI 调度程序时也是如此

mysql - 使用 MySQL 从字段中删除字符串

sql - 如何 "HAVING COUNT(DISTINCT(col1, col2))"

sql - 对于仅包含年份的列,我应该使用什么类型?