使用c#参数化查询进行返工
本文关键字:查询 参数 使用 | 更新日期: 2023-09-27 18:14:10
有很多关于参数化查询的教程,但其中大多数涉及使用SqlCommand
,我的代码唯一接受的是SqlDataAdapter
为我的SQL命令,任何时候我试图将其实例化为SqlCommand
,我得到错误。
TL;博士
我要么需要关于如何使用参数化查询重新工作的指导,要么我需要知道为什么我的SqlDataAdapter
行不能作为SqlCommand
行工作。
private void btnLogin_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.'SQLEXPRESS;AttachDbFilename=C:'Users'Jake'Documents'Data.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
SqlDataAdapter sda = new SqlDataAdapter("Select Count(*) From Login Where Username = '" + txtUsername.Text + "' and Password = '" + txtPassword.Text + "'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
this.Hide();
MessageBox.Show("LOGIN!");
}
else
{
MessageBox.Show("FAILED!");
}
}
您可以使用:
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;
}
密码请记住使用散列算法
此代码未经过测试。如果你想要最好的性能,你可以探索执行标量。
可以在SqlDataAdapter中使用Parameters.AddWithValue
sda.SelectCommand.Parameters.AddWithValue("@ParamName",value);
检查这个:c# Using Parameters。SqlDataAdapter中的AddWithValue
尝试使用参数化查询,它将避免错误和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;