try
{
//insert data into database
//check if data already exists
using (SqlConnection con = new SqlConnection(@"Server=DESKTOP-31579CJ\SQLEXPRESS;Database=LoginInformation;Trusted_connection = True;"))
{
SqlCommand cmd = new SqlCommand(@"SELECT User.Username FROM User WHERE Username = '" + Username.Text + "'", con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
MessageBox.Show("Username already exists");
}
else
{
MessageBox.Show("Account created");
cmd = new SqlCommand(@"INSERT INTO User (Username,Password) VALUES ('" + Username.Text + "','" + Password.Password + "')", con);
cmd.ExecuteNonQuery();
//clear textboxes
Username.Text = "";
Password.Password = "";
}
dr.Close();
con.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Exception occured" + ": " + ex.Message);
SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-31579CJ\SQLEXPRESS;Initial Catalog=LoginInformation;Integrated Security=True;User ID = yes; Password = yes");
//create table if one does not exist
SqlCommand cmd = new SqlCommand("CREATE TABLE User (Username varchar(50), Password varchar(50))", con);
}
当我尝试执行此查询时,遇到异常:
关键字“User”附近有语法错误
但是我并没有经常使用C#或SQL,所以我真的看不出问题所在--如果您对这段代码有任何反馈,我们将不胜感激
1条答案
按热度按时间rkue9o1l1#
我还没有检查以确认,但我猜测“User”是T-SQL中的保留字,因此您需要对其进行转义:
注意,我已经从列名中删除了表限定符。您可以包含它,但在涉及单个表的语句中它是毫无意义的。如果您包含它,您还需要对其进行转义。
你也必须在你的其他SQL中做同样的事情。“密码”也可能是一个保留字-它在Access中,但我不确定SQL Server。
这超出了这个问题的范围,但是您也不应该使用字符串连接将值插入到SQL中。这是非常糟糕的做法,可能会导致各种问题,包括恶意用户可能损坏或删除整个数据库。立即学习如何使用参数。Here是我对这个主题的看法。