有很多关于参数化查询的教程,但大多数都涉及使用SqlCommand
,我的代码接受的唯一事情就是SqlDataAdapter
我的SQL命令,只要我尝试将其实例化为{ {1}}我收到错误。
TL; DR
我或者需要有关如何使用参数化查询重新编写此内容的指导,或者我需要知道为什么SqlCommand
行不能用作SqlDataAdapter
行。
SqlCommand
答案 0 :(得分:2)
您可以使用:
using (SqlDataAdapter sqlDA = new SqlDataAdapter("Select * from user where username = @username and password = @pass", sqlConnect))
{
sqlDA.SelectCommand.CommandType = CommandType.Text;
sqlDA.SelectCommand.Parameters.Add("@username", SqlDbType.Varchar).Value = username;
sqlDA.SelectCommand.Parameters.Add("@pass", SqlDbType.Varchar).Value = password;
sqlDA.Fill(dataTableVariable);
return dataTableVariable;
}
对于您的密码,请记住使用哈希算法
此代码未经过测试。如果你想获得最佳性能,你可以探索执行标量。
答案 1 :(得分:1)
您可以在SqlDataAdapter中使用Parameters.AddWithValue
sda.SelectCommand.Parameters.AddWithValue("@ParamName",value);
答案 2 :(得分:1)
尝试使用参数化查询,它将避免错误和SQL注入
获得阅读器后,您可以使用HasRow()
检查是否返回了记录
string conString = "xxxxxxxxxxxxxxxxxxxxxxxx";
using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
using (var cmd = new SqlCommand(
"SELECT * FROM Login Where Username=@Username AND Password=@Password",
con))
{
cmd.Parameters.AddWithValue("@Username", txtUsername.Text);
cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRow())
{
if(reader.Read())
{
var username = reader["Username"].ToString();
}
}
else
{
//User does not exists
}
}
}
}
您需要导入一些库:
using System;
using System.Data;
using System.Data.SqlClient;