Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# 将数据插入ms access表时出现语法错误_C#_Oledb_Jet - Fatal编程技术网

C# 将数据插入ms access表时出现语法错误

C# 将数据插入ms access表时出现语法错误,c#,oledb,jet,C#,Oledb,Jet,我有以下代码: OleDbConnection aConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=storage_db.accdb"); string sql = "INSERT INTO Client cname,phone,password)

我有以下代码:

OleDbConnection aConnection = new
                    OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;
                                 Data Source=storage_db.accdb");
string sql = "INSERT INTO Client cname,phone,password)
                           VALUES('"+textBox1.Text+"','"+textBox2.Text+"',
                                  '"+textBox3.Text+"')";
aConnection.Open();
OleDbCommand insert = new OleDbCommand(sql, aConnection);
insert.ExecuteNonQuery();
aConnection.Close();
但当我尝试插入数据时,在插入查询中出现异常语法错误。我做错了什么?

试试这个:

string sql = "INSERT INTO Client (cname, phone, [password])
VALUES('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
你忘了括号。 但最好使用参数查询。

尝试以下方法:

string sql = "INSERT INTO Client (cname, phone, [password])
VALUES('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')";
你忘了括号。
但是最好使用参数查询。

Password
是Access中的保留字,因此您需要在查询中将
Password
列括在方括号中。您还需要将插入数据的列用括号括起来:

INSERT INTO (Client cname,phone,[password]) VALUES(...

正如@HarveySpecter在评论中指出的,您还应该使用参数化查询,而不是连接用户输入,否则您将面临SQL注入攻击。

Password
是Access中的保留字,因此您需要在查询中将
Password
列用方括号括起来。您还需要将插入数据的列用括号括起来:

INSERT INTO (Client cname,phone,[password]) VALUES(...

正如@HarveySpecter在评论中指出的,您还应该使用参数化查询,而不是连接用户输入,否则您将面临SQL注入攻击。

您的插入语法不正确。。。您需要在要插入的字段和values子句周围添加()

insert into Client
   ( cname, phone, [password] )
   values
   ( ?, ?, ? )
“?”是参数的占位符,参数语句的顺序必须与“?”表示的顺序相同。还有,请注意。。。如果预期值为数字、日期等,请确保在参数中设置的值也是正确的数据类型。但在您的例子中,这些都是基于字符串的

OleDbCommand insert = new OleDbCommand(sql, aConnection);
insert.Parameters.Add( "parmName", textBox1.Text );
insert.Parameters.Add( "parmPhone", textBox2.Text );
insert.Parameters.Add( "parmPwd", textBox3.Text );

您的插入语法不正确。。。您需要在要插入的字段和values子句周围添加()

insert into Client
   ( cname, phone, [password] )
   values
   ( ?, ?, ? )
“?”是参数的占位符,参数语句的顺序必须与“?”表示的顺序相同。还有,请注意。。。如果预期值为数字、日期等,请确保在参数中设置的值也是正确的数据类型。但在您的例子中,这些都是基于字符串的

OleDbCommand insert = new OleDbCommand(sql, aConnection);
insert.Parameters.Add( "parmName", textBox1.Text );
insert.Parameters.Add( "parmPhone", textBox2.Text );
insert.Parameters.Add( "parmPwd", textBox3.Text );

使用参数查询。您正在使用的更不安全。请使用参数查询。您正在使用的那个更不安全。请在这里写入堆栈跟踪的sql查询结果,例如“插入到客户端(cname、电话、密码)值('text1'、'text2'、'text3')。您的文本数据中可能有错误…在System.data.dll中打开异常类型“System.data.OleDb.OledBeException”附加信息:插入到指令中的语法错误。什么是客户端表结构?所有文本框都有值?是的文本框所有触感/桌面客户端都有4个文化id、cname、电话和密码。id是自动递增的所有其他类型都是shorttext。并在此处写入堆栈跟踪的sql查询结果,例如“插入到客户端(cname、电话、密码)值('text1'、'text2'、'text3')。您的文本数据中可能有错误…在System.data.dll中打开异常类型“System.data.OleDb.OledBeException”附加信息:插入到指令中的语法错误。什么是客户端表结构?所有文本框都有值?是的文本框所有触感/桌面客户端都有4个文化id、cname、电话和密码。id为自动递增,其他所有类型均为短文本。