我可以知道我的陈述有什么问题吗?我收到语法错误。一直试图找出错误的一整天。 :(
cmd.CommandText = "INSERT INTO LogIn(Username,Password) VALUES('" + AddUsernameTextBox.Text + "','" + AddPasswordTextBox.Text + "')";
答案 0 :(得分:3)
cmd.CommandText = "INSERT INTO LogIn([Username],[Password]) VALUES('" + AddUsernameTextBox.Text + "','" + AddPasswordTextBox.Text + "')";
如果错误是由保留关键字引起的,则此代码将有所帮助: - 用户名和密码。如果不是这样,请引用错误。
答案 1 :(得分:2)
command.CommandText = "INSERT INTO Login([Username],[Password]) VALUES(@Username, @Password)";
//Not sure how you create your commands in your project
//here I'm using the ProviderFactory to create instances of provider specific DbCommands.
var parameter = dbProviderFactory.CreateParameter();
parameter.DbType = System.Data.DbType.String;
parameter.ParameterName = "@Username";
parameter.Value = AddUsernameTextBox.Text;
command.Parameters.Add(parameter);
parameter = dbProviderFactory.CreateParameter();
parameter.DbType = System.Data.DbType.String;
parameter.ParameterName = "@Password";
parameter.Value = AddPasswordTextBox.Text;
command.Parameters.Add(parameter);
下面是使用ConnectionStringSettings和DbProviderFactory等的更完整的代码示例。这不能解决您的问题,但如果您正在使用ADO.NET核心,这是进行数据访问的方式在你的样本中。
ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings["SomeConnectionName"];
if (connectionStringSettings == null)
throw new Exception("Application config file does not contain a connectionStrings section with a connection called \"SomeConnectionName\"");
DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);
using (var dbConnection = dbProviderFactory.CreateConnection())
{
dbConnection.ConnectionString = connectionStringSettings.ConnectionString;
dbConnection.Open();
using (var command = dbConnection.CreateCommand())
{
command.CommandText = "INSERT INTO Login([Username],[Password]) VALUES(@Username, @Password)";
var parameter = dbProviderFactory.CreateParameter();
parameter.DbType = System.Data.DbType.String;
parameter.ParameterName = "@Username";
parameter.Value = AddUsernameTextBox.Text;
command.Parameters.Add(parameter);
parameter = dbProviderFactory.CreateParameter();
parameter.DbType = System.Data.DbType.String;
parameter.ParameterName = "@Password";
parameter.Value = AddPasswordTextBox.Text;
command.Parameters.Add(parameter);
var dbTransaction = dbConnection.BeginTransaction();
try
{
command.ExecuteNonQuery();
dbTransaction.Commit();
}
catch (Exception)
{
dbTransaction.Rollback();
throw;
}
}
}
上面依赖的代码的app.Config文件如下所示。当然,只有配置文件中的connectionStrings部分在此上下文中很重要
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="SomeConnectionName" providerName="System.Data.OleDb" connectionString="Your Provider Specific Connection String" />
</connectionStrings>
</configuration>
答案 2 :(得分:1)
最好的方法是使用参数:'@' 通过这种方式,您的代码将更加清晰易懂。并使您的应用程序更安全。
试试这段代码:
using (var con = new OleDbConnection(_constring))
{
con.Open();
using (
var cmd =
new OleDbCommand(
"UPDATE LogIn SET Username=@Username, Password=@Password WHERE (ID = @Id)",
con))
{
try
{
cmd.Parameters.AddWithValue("@Username",EditUsernameTextBox.Text);
cmd.Parameters.AddWithValue("@Password",EditPasswordTextBox.Text);
cmd.Parameters.AddWithValue("@Id",IDTextBox.Text);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw;
}
finally
{
con.Close();
}
}
问候!
答案 3 :(得分:1)
请保护单引号。此外,您可能需要在Access SQL字符串中使用结束分号。
cmd.CommandText =“INSERT INTO LogIn(用户名,密码)VALUES('”+ AddUsernameTextBox.Text.Replace(“'”,“''”)+“','”+ AddPasswordTextBox.Text.Replace(“ '“,”''“)+”');“;
使用参数化查询当然只有100%更好;来自你的其他问题是这个C#/ Visual Studio通过OLE / Jet对抗MS Access吗?
答案 4 :(得分:0)
ID列是整数吗?如果不是,您也需要用单引号括起值。 另外,请尝试删除括号。
答案 5 :(得分:0)
最有可能的是,IDTextBox.text中的值不是数字...
但是像丹尼尔指出的那样,这非常容易受到SQL注入......
如果我输入会发生什么:
' ; DROP TABLE login
答案 6 :(得分:0)
检查这是否有效。您缺少WHERE语句中值的单引号:
"UPDATE
LogIn
SET
Username = '" + EditUsernameTextBox.Text + "'
,Password = '" + EditPasswordTextBox.Text + "'
WHERE
(ID = '" + IDTextBox.Text + "')";
另外,请确保,正如Daniel White所说,你会处理任何SQL注入。
答案 7 :(得分:0)
如果您的ID是非数字的,则错过了一对撇号:
WHERE (ID ='" + IDTextBox.Text + "')";
答案 8 :(得分:0)
EditUsernameTextBox.Text
或EditPasswordTextBox.Text
的值是否有引号?这样就可以了解SQL。
如果是这样,你需要逃脱它们。或者不要使用已经指出的字符串连接......
你是否打印出声明,看看它的要求是什么......?