INSERT INTO语句语法错误

本文关键字:错误 语法 语句 INTO INSERT | 更新日期: 2023-09-27 18:11:33

我试图在用户表中插入一些值,

中有4个属性
User-User_Name varchar(20)  
User_Password varchar(20)  
Entry_Date timestamp  
Entry_Time timestamp

我已经试了很多次了,但还是没能找到问题所在。

using (OleDbConnection connection = new OleDbConnection(cs))
{
    string cb1 = "INSERT INTO User([User_Name],[User_Password],[Entry_Date],[Entry_Time]) VALUES (@val1,@val2,@val3,@val4)";
    using (OleDbCommand comm = new OleDbCommand(cb1, connection))
    {
        connection.Open();
        comm.Parameters.AddWithValue("@val1", txtUserName.Text);
        comm.Parameters.AddWithValue("@val2", txtPassword.Text);
        comm.Parameters.AddWithValue("@val3", DateTime.Now.ToString("d"));
        comm.Parameters.AddWithValue("@val4", DateTime.Now.ToString("t"));
        comm.ExecuteNonQuery();
     }
}

INSERT INTO语句语法错误

User是transact sql中的保留关键字。用方括号括起来,如INSERT INTO [User] ....

USER是OLE DB Provider中的保留关键字。你需要用方括号像[USER]我知道UserUSER是不一样的,但这意味着你的数据库服务器是不区分大小写的选项。

您的Entry_DateEntry_Time列是timestamp,但您尝试添加DateTime部分的字符串表示。

最好的方法是将Entry_Date列更改为Date类型,并将.Date.TimeOfDay属性提供给这些列您当前的本地时间。

不要使用AddWithValue方法。它有时可能产生意想不到的结果。使用Add方法重载来指定你的参数类型和大小。

最后,让而不是将密码保存为纯文本。在数据库中存储密码的最佳方法

using (var connection = new OleDbConnection(cs))
using (var comm = new connection.CreateCommand())
{
    comm.CommandText = @"INSERT INTO [User]([User_Name],[User_Password],[Entry_Date],[Entry_Time]) 
                         VALUES (@val1,@val2,@val3,@val4)"
    comm.Parameters.Add("@val1", txtUserName.Text);
    comm.Parameters.Add("@val2", txtPassword.Text);
    comm.Parameters.Add("@val3", DateTime.Now.Date);
    comm.Parameters.Add("@val4", DateTime.Now.TimeOfDay);
    connection.Open();
    comm.ExecuteNonQuery();
}