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();
}
}
User是transact sql中的保留关键字。用方括号括起来,如INSERT INTO [User] ....
USER
是OLE DB Provider中的保留关键字。你需要用方括号像[USER]
我知道User
和USER
是不一样的,但这意味着你的数据库服务器是不区分大小写的选项。
您的Entry_Date
和Entry_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();
}