Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#和asp.net将sql插入access数据库时出现语法错误_C#_Asp.net_Sql_Ms Access - Fatal编程技术网

使用C#和asp.net将sql插入access数据库时出现语法错误

使用C#和asp.net将sql插入access数据库时出现语法错误,c#,asp.net,sql,ms-access,C#,Asp.net,Sql,Ms Access,我在电话里听到一个错误 cmd.ExecuteNonQuery(); 上面说 INSERT INTO语句中的语法错误 我认为我的查询应该是有效的,我不理解这个问题,我已经为此工作了几个小时。这是在正确的顺序,并把[]周围用户不适合我,将感谢帮助 <%@ Page Language ="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %>

我在电话里听到一个错误

cmd.ExecuteNonQuery();
上面说

INSERT INTO语句中的语法错误

我认为我的查询应该是有效的,我不理解这个问题,我已经为此工作了几个小时。这是在正确的顺序,并把
[]
周围
用户
不适合我,将感谢帮助

<%@ Page Language ="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>   
    <script runat="server">
    protected void Page_Load()
    {

            String username = Request.Form["username"];
            String email = Request.Form["email"];
            String password = Request.Form["password1"];
            var age = Request.Form["age"];
            String country = Request.Form["country"];
            String hobbie = Request.Form["skin"];
            String sql;

            sql = "INSERT INTO Users(UserName, Email, Password, Age, Country, Hobbie) VALUES('" + username + "','" + email + "','" + password + "'," + age + ",'" + country + "','" + skin + "')";

            String Path = Server.MapPath("App_Data/Users.accdb");
            String connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Path;

            OleDbConnection conn = new OleDbConnection(connStr);
            conn.Open();

            OleDbCommand cmd = new OleDbCommand(sql, conn);
            cmd.ExecuteNonQuery();

            conn.Close();
    }

受保护的无效页面加载()
{
字符串username=Request.Form[“username”];
字符串email=Request.Form[“email”];
字符串密码=Request.Form[“password1”];
var age=Request.Form[“age”];
字符串country=Request.Form[“country”];
字符串hobbie=Request.Form[“skin”];
字符串sql;
sql=“在用户(用户名、电子邮件、密码、年龄、国家/地区、Hobbie)中插入值(“+UserName+”、“+Email+”、“+Password+”、“+Age+”、“+Country+”、“+skin+”)”);
字符串路径=Server.MapPath(“App_Data/Users.accdb”);
String connStr=“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=“+Path;
OLEDB连接conn=新的OLEDB连接(connStr);
conn.Open();
OleDbCommand cmd=新的OleDbCommand(sql,conn);
cmd.ExecuteNonQuery();
康涅狄格州关闭();
}

我认为密码是一个保留字。使用like[密码]

试试这个

sql = "INSERT INTO Users(UserName,Email,[Password],Age,Country,Hobbie) VALUES('" + username + "','" + email + "','" + password + "'," + age + ",'" + country + "','" + skin + "')";
这是不推荐的。使用参数化查询。如下图所示:

 sql = "INSERT INTO Users(UserName, Email, [Password], Age, Country, Hobbie) 
           VALUES(@UserName,@Email,@Password,@Age,@Country,@Hobbie)";

   OleDbCommand cmd = new OleDbCommand(sql, conn);
   cmd.Connection = conn;
   cmd.CommandType = CommandType.Text;   
   cmd.Parameters.AddWithValue("@UserName", username);
   cmd.Parameters.AddWithValue("@Email", Email);
   cmd.Parameters.AddWithValue("@Password", Password);
   cmd.Parameters.AddWithValue("@Age", Age);
   cmd.Parameters.AddWithValue("@Country", Country);
   cmd.Parameters.AddWithValue("@Hobbie", Hobbie);

密码是MS Access的保留关键字。用方括号括起来

    sql = "INSERT INTO Users(UserName, Email, [Password] ....
但请将该sql文本更改为使用参数化查询。此外,如果您能够使用实际值发送此命令,则您的查询仍然存在Sql注入漏洞,并且当您的输入字符串包含单个引号时,可能会出现解析问题

   sql = @"INSERT INTO Users(UserName, Email, [Password], Age, Country, Hobbie) 
           VALUES(?,?,?,?,?,?)";
   ....

   OleDbCommand cmd = new OleDbCommand(sql, conn);
   cmd.Parameters.AddWithValue("@p1", username);
   .... and so on for the other 5 parameters required by the query ....

使用[Password]而不是Password

+1再次建议使用参数化查询,而不是拼凑SQL语句!非常感谢!它成功了,这是一个学校的小项目,所以我研究了他们告诉我怎么做,我在这方面的知识非常有限。也许可以尝试使用String.Format,而不是字符串与+(因此,如果有错误,就更清楚了)。此外,如果可以,请尝试输出用户名、电子邮件、密码。。。因此,您可以查看它们的格式是否不正确。SQL注入不是一件好事。