嗨,伙计们对参数化查询有福彩12选5走势图问题。

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
95
编程经验
Beginner
最初我正在连接我的SQL查询,然后我被告知最好使用参数化查询来防止SQL注入。我现在已经做到了,一切都很好,但是,在昨天发布论坛上的福彩12选5走势图疑问没有正常工作,福彩12选5走势图人告诉我,我应该使用SSM来编写我的SQL查询,然后将它们粘贴回福彩12选5走势图字符串Visual Studio中的变量?

我要粘贴一些我的代码,有人可以告诉我我是否正确完成了一切?我在代码中写了所有查询,如果我不得不回去改变一切,它会吮吸,看到我下周的截止日期 :EEK: Thanks guys!


C#:
public partial class adminLogin : Form
    {
        SqlCommand cmd;
        private static IsqlDataFunctions _isqlDataFunctions;
        public adminLogin(IsqlDataFunctions dataFunctions)
        {
            _isqlDataFunctions = dataFunctions;
        }
        public static void creationOfSqlDataFunctions()
        {
            SqlDataFunctions sqlDataFunctions = new SqlDataFunctions();
            new adminLogin(sqlDataFunctions);
        }

        public adminLogin()
        {
            creationOfSqlDataFunctions();
            InitializeComponent();
        }

        private void adminSignUpBtn_Click(object sender, EventArgs e)
        {
            if (txtAdminFirstName.Text == "" || txtAdminLastName.Text == "" || comboBoxAdminPosition.Text == "" || txtAdminPass.Text == "" || txtAdminContact.Text == "" || txtAdminEmail.Text == "")
            {
                MessageBox.Show("Error: please ensure all fields have been entered!");
            }
            else
            {          
                try
                {
                    string query_1 = "Insert into employee  (firstName, lastName, position, contactNumber) VALUES (@firstName, @lastName, @position, @contact)";
                    string query_2 = "select employeeId FROM employee WHERE employeeId = (SELECT MAX(employeeId) FROM employee)";
                    string query_3 = "Insert into employeeLogin (email, password, employeeId) VALUES (@email, @password, @employeeId)";

                    _isqlDataFunctions.GetConnection().Open();
                    cmd = new SqlCommand(query_1, _isqlDataFunctions.GetConnection());
                    cmd.Parameters.AddWithValue("@firstName", txtAdminFirstName.Text.Trim());
                    cmd.Parameters.AddWithValue("@lastname", txtAdminLastName.Text);
                    cmd.Parameters.AddWithValue("@position", comboBoxAdminPosition.Text);
                    cmd.Parameters.AddWithValue("@contact", txtAdminContact.Text);
                    cmd.ExecuteNonQuery();
             
                    cmd = new SqlCommand(query_2, _isqlDataFunctions.GetConnection());
                    var employeeid = cmd.ExecuteScalar();
     
                    cmd = new SqlCommand(query_3, _isqlDataFunctions.GetConnection());
                    cmd.Parameters.AddWithValue("@email", txtAdminEmail.Text.Trim());
                    cmd.Parameters.AddWithValue("@password", SqlDataFunctions.hashPassword(txtAdminPass.Text.Trim()));
                    cmd.Parameters.AddWithValue("@employeeId", employeeid);
                    cmd.ExecuteNonQuery();

                    _isqlDataFunctions.GetConnection().Close();
                    MessageBox.Show("Your account has been registered succesfully!");
                    clearFields();          
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                };
            }
        }
   
        private void adminSignInBtn_Click(object sender, EventArgs e)
        {
           
            string query = "SELECT * FROM employeeLogin where email= @email AND password = @password ";

            cmd = new SqlCommand(query, _isqlDataFunctions.GetConnection());
            cmd.Parameters.AddWithValue("@email", adminSignInEmail.Text.Trim());
            cmd.Parameters.AddWithValue("@password", SqlDataFunctions.hashPassword(adminSignInPass.Text.Trim()));
            _isqlDataFunctions.Login(cmd, new adminLogin(), new TGCS_backend.backend());
                       
        }
        private void customerLoginbtn_Click(object sender, EventArgs e)
        {
            var userLogin = new SignIn();
            this.Hide();
            userLogin.Show();
        }
        private void clearFields()
        {
            txtAdminFirstName.Text = "";
            txtAdminLastName.Text = "";
            comboBoxAdminPosition.Text = "";
            txtAdminPass.Text = "";
            txtAdminContact.Text = "";
            txtAdminEmail.Text = "";
        }

        private void ExitBtn_Click(object sender, EventArgs e)
        {
            Environment.Exit(0);
        }
    }
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,692
地点
悉尼,澳大利亚
编程经验
10+
福彩12选5走势图人告诉我,我应该使用SSM来编写我的SQL查询,然后将它们粘贴回Visual Studio中的字符串变量?
你不必这样做,但这是福彩12选5走势图好主意。我可以直接在这个论坛中编写代码,它可能是正确的,但在编译器的帮助下,它仍然比在VS中写入vs更容易出错,然后测试它按预期工作。同样,SSMS将验证您的SQL代码,您可以轻松运行它以确保获得预期的结果。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,692
地点
悉尼,澳大利亚
编程经验
10+
就SQL和参数而言,我没有看到代码的任何明显的问题。还有其他一些问题,但如果您的代码按预期运行,则可以假设您使用ADO.NET参数是声音。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,692
地点
悉尼,澳大利亚
编程经验
10+
我无法帮助的一件事是指出的:
SQL:
select employeeId FROM employee WHERE employeeId = (SELECT MAX(employeeId) FROM employee)
想想你实际上要在那里实现什么以及你实际在做什么。最终结果将是正确的,但是SQL真的有意义吗?
 

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
95
编程经验
Beginner
你不必这样做,但这是福彩12选5走势图好主意。我可以直接在这个论坛中编写代码,它可能是正确的,但在编译器的帮助下,它仍然比在VS中写入vs更容易出错,然后测试它按预期工作。同样,SSMS将验证您的SQL代码,您可以轻松运行它以确保获得预期的结果。
是的,我非常相信任何疑问都没有问题,我已经多次测试了它们,他们都按预期工作。当我昨天发表评论时,我只是有点关注,让我恐慌 :哈哈:
 

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
95
编程经验
Beginner
我无法帮助的一件事是指出的:
SQL:
select employeeId FROM employee WHERE employeeId = (SELECT MAX(employeeId) FROM employee)
想想你实际上要在那里实现什么以及你实际在做什么。最终结果将是正确的,但是SQL真的有意义吗?
啊,是的,我一直意义改变,我现在将研究 (y)
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,818
地点
切萨皮克,va.
编程经验
10+
正如我所提到的那样 其他线程,这仍然是福彩12选5走势图可怕的方法来弄清楚ID被分配给您刚插入数据库的新用户。考虑如果在查询之前返回两个用户插入以确定分配给用户的ID,则会考虑发生的内容。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,692
地点
悉尼,澳大利亚
编程经验
10+
正如我所提到的那样 其他线程,这仍然是福彩12选5走势图可怕的方法来弄清楚ID被分配给您刚插入数据库的新用户。考虑如果在查询之前返回两个用户插入以确定分配给用户的ID,则会考虑发生的内容。
Indeed. You should be including a SELECT statement in the same command as your INSERT, using SCOPE_IDENTITY to get the last ID generated in the current scope and then retrieving that value via a parameter. Just like method parameters in C#, SQL parameters are usually used for input but can be used for output or both.
 
最佳 底部