使用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!");
    }
}

使用c#参数化查询进行返工

您可以使用:

   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;