debugging 使用.NET c#应用程序从数据库中选择数据时出现问题

jdzmm42g  于 2022-11-14  发布在  .NET
关注(0)|答案(1)|浏览(151)
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,所以我真的看不出问题所在--如果您对这段代码有任何反馈,我们将不胜感激

rkue9o1l

rkue9o1l1#

我还没有检查以确认,但我猜测“User”是T-SQL中的保留字,因此您需要对其进行转义:

SqlCommand cmd = new SqlCommand(@"SELECT Username FROM [User] WHERE Username = '" + Username.Text + "'", con);

注意,我已经从列名中删除了表限定符。您可以包含它,但在涉及单个表的语句中它是毫无意义的。如果您包含它,您还需要对其进行转义。
你也必须在你的其他SQL中做同样的事情。“密码”也可能是一个保留字-它在Access中,但我不确定SQL Server。
这超出了这个问题的范围,但是您也不应该使用字符串连接将值插入到SQL中。这是非常糟糕的做法,可能会导致各种问题,包括恶意用户可能损坏或删除整个数据库。立即学习如何使用参数。Here是我对这个主题的看法。

相关问题