我正在尝试使用ASP.NET创建一个登录字段,该字段将从文本框字段中输入内容,并对照数据库中的“ user”表对其进行检查。列为User ID
和Password
。但是有错误
使用登录表单时出现System.Data.SqlClient.SqlException:'''附近的语法不正确
。我没有看到语法上的任何问题...
我是新手,所以如果错误很明显,请原谅!
public partial class Login_Page : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblErrorMessage.Visible = false;
SqlConnection con = new SqlConnection("Data Source=JACKS-PC\\SQLEXPRESS;Initial Catalog=CBR;Integrated Security=True");
con.Open();
}
protected void btnLogin_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=JACKS-PC\\SQLEXPRESS;Initial Catalog=CBR;Integrated Security=True";
con.Open();
string userid = txtUsername.Text.Trim();
string password = txtPassword.Text.Trim();
SqlCommand cmd = new SqlCommand("select `user id`,`password` from user where `user id`='" + txtUsername.Text + "'and `password`='" + txtPassword.Text + "'", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
Session["username"] = txtUsername.Text.Trim();
Response.Redirect("Homepage.aspx");
}
else
{
lblErrorMessage.Visible = true;
}
con.Close();
}
}
答案 0 :(得分:3)
只需删除“`”字符即可使其正常工作。
您的代码容易被注入,请尝试使用SqlCommand.Parameters.Add()
方法添加值。
使用此代码:
SqlCommand cmd = new SqlCommand("select userid, password from user where user id = @id and password = @password", con);
cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = txtUsername.Text;
cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = txtPassword.Text;
正如@marc_s所述,user id
不是有效的列名,应该像userid
一样,或者如果其中有空格应该像是:[user id]
答案 1 :(得分:1)
您的代码有很多问题:
`
不是SQL Server语法。。
using (SqlCommand cmd = new SqlCommand("select 1 from tbl where id=@id", conn))
{
var idParameter = new SqlParameter()
idParameter.ParameterName = "@id";
idParameter.Value = 1234;
cmd.Parameters.Add(idParameter);
....
}
using(SqlConnection conn = new SqlConnection())
。