使用 Oledb 的 C# 更新中的语法错误
Syntax error in UPDATE for C# using Oledb
我正在创建一个简单的应用程序,用户可以在其中创建帐户。我希望用户在创建帐户后能够更改密码。
我正在使用 Oledb 在 C# 中制作这个。
string test = "testing";
con.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = con;
string query = "UPDATE tbl_users SET password = '" + test + "' WHERE username = '" + txtLoginUsername.Text + "'";
MessageBox.Show(query);
command.CommandText = query;
command.ExecuteNonQuery();
con.Close();
我不断收到错误消息:
" System.Data.OleDbException: 'Syntax error in UPDATE'"
此错误发生在行中:
command.ExecuteNonQuery();
使用这个语法
在查询中使用括号作为密码
因为密码是保留字
link保留世界列表
using (var connection = new OleDbConnection("Your Connection String"))
{
var query = "UPDATE tbl_users SET [password] = @password WHERE username = @username";
using (var command = new OleDbCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@password", "test");
command.Parameters.AddWithValue("@username", txtLoginUsername.Text);
command.ExecuteNonQuery();
}
}
为了阐明 Hossein 的回答,当您通过将字符串添加在一起来构建查询命令时,您对 SQL 注入持开放态度。请仔细阅读它,以保护您的未来发展。
参考使用“参数”。这基本上是指查询的占位符值,例如“在此处插入”,而不是像在密码和用户名的值前后用单引号括起来那样向查询硬添加部分。
查看您的原始查询
"UPDATE tbl_users SET password = '" + test + "' WHERE username = '" + txtLoginUsername.Text + "'";
如果有人输入
的值会怎样
Password: What's Up
Username: O'Conner
您的最终查询命令与您的方法连接时将创建一个值
UPDATE tbl_users SET password = 'What's Up' WHERE username = 'O'Conner'
看看字面值现在是如何把字符串从它的意图中搞砸的。
通过使用“@”值,这是在告诉 SQL 嘿...将有另一个值与所提供的名称一起出现,请在此处使用该值。在某些数据库中,它们不使用命名参数,而是使用“?”单个字符而不是作为占位符,您必须按照它们在您尝试准备的语句中出现的确切顺序添加参数。
个人喜好的另一件事。如果您的列名称是 UserName
,我会使用像“@parmUserName”这样的参数名称,这样您就知道它是明确的参数,而不是不小心只是做了 UserName = UserName
而没有得到结果。还有几个字符,但很明显它的目的和来源。
现在,它是如何应用的?再看看侯赛因的回答。注意两个
command.Parameters.AddWithValue("@password", "test");
command.Parameters.AddWithValue("@username", txtLoginUsername.Text);
这是将参数添加到 command
对象的地方。说明,在你看到 @password
的地方,使用我在此处放置的以下值,与 @username
.
相同
祝你好运。
我正在创建一个简单的应用程序,用户可以在其中创建帐户。我希望用户在创建帐户后能够更改密码。
我正在使用 Oledb 在 C# 中制作这个。
string test = "testing";
con.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = con;
string query = "UPDATE tbl_users SET password = '" + test + "' WHERE username = '" + txtLoginUsername.Text + "'";
MessageBox.Show(query);
command.CommandText = query;
command.ExecuteNonQuery();
con.Close();
我不断收到错误消息: " System.Data.OleDbException: 'Syntax error in UPDATE'"
此错误发生在行中:
command.ExecuteNonQuery();
使用这个语法
在查询中使用括号作为密码 因为密码是保留字
link保留世界列表
using (var connection = new OleDbConnection("Your Connection String"))
{
var query = "UPDATE tbl_users SET [password] = @password WHERE username = @username";
using (var command = new OleDbCommand(query, connection))
{
connection.Open();
command.Parameters.AddWithValue("@password", "test");
command.Parameters.AddWithValue("@username", txtLoginUsername.Text);
command.ExecuteNonQuery();
}
}
为了阐明 Hossein 的回答,当您通过将字符串添加在一起来构建查询命令时,您对 SQL 注入持开放态度。请仔细阅读它,以保护您的未来发展。
参考使用“参数”。这基本上是指查询的占位符值,例如“在此处插入”,而不是像在密码和用户名的值前后用单引号括起来那样向查询硬添加部分。
查看您的原始查询
"UPDATE tbl_users SET password = '" + test + "' WHERE username = '" + txtLoginUsername.Text + "'";
如果有人输入
的值会怎样Password: What's Up
Username: O'Conner
您的最终查询命令与您的方法连接时将创建一个值
UPDATE tbl_users SET password = 'What's Up' WHERE username = 'O'Conner'
看看字面值现在是如何把字符串从它的意图中搞砸的。
通过使用“@”值,这是在告诉 SQL 嘿...将有另一个值与所提供的名称一起出现,请在此处使用该值。在某些数据库中,它们不使用命名参数,而是使用“?”单个字符而不是作为占位符,您必须按照它们在您尝试准备的语句中出现的确切顺序添加参数。
个人喜好的另一件事。如果您的列名称是 UserName
,我会使用像“@parmUserName”这样的参数名称,这样您就知道它是明确的参数,而不是不小心只是做了 UserName = UserName
而没有得到结果。还有几个字符,但很明显它的目的和来源。
现在,它是如何应用的?再看看侯赛因的回答。注意两个
command.Parameters.AddWithValue("@password", "test");
command.Parameters.AddWithValue("@username", txtLoginUsername.Text);
这是将参数添加到 command
对象的地方。说明,在你看到 @password
的地方,使用我在此处放置的以下值,与 @username
.
祝你好运。