'username'附近的语法不正确 - 错误c#

时间:2018-03-05 17:32:00

标签: c# sql

我尝试了所有内容并搜索了相关主题,但没有任何作用。

这是我的代码

            {
                byte[] images = null;
                FileStream fs = new FileStream(imgLocation, FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                images = br.ReadBytes((int)fs.Length);

                SqlConnection con2 = new SqlConnection(@"Data Source=USER-PC; Initial Catalog=ProfRegistration; Integrated Security=True;");
                con2.Open();
                String str2 = "INSERT INTO ProfInfo(UserID,FirstName,MiddleName,LastName,Department,Username,Password,Image)  VALUES('" + txtID.Text + "' , '" + txtFirstName.Text + "' , '" + txtMiddleName.Text + "' , '" + txtLastName.Text + "', '" + txtDep.Text + "' '" + txtUsername.Text + "', '" + txtPassword.Text + "', @Image)";
                SqlCommand cmd2 = new SqlCommand(str2, con2);
                cmd2.Parameters.Add(new SqlParameter("@UserID", txtID.Text));
                cmd2.Parameters.Add(new SqlParameter("@FirstName", txtFirstName.Text));
                cmd2.Parameters.Add(new SqlParameter("@MiddleName", txtMiddleName.Text));
                cmd2.Parameters.Add(new SqlParameter("@LastName", txtLastName.Text));
                cmd2.Parameters.Add(new SqlParameter("@Department", txtDep.Text));
                cmd2.Parameters.Add(new SqlParameter("@Username", txtUsername.Text));
                cmd2.Parameters.Add(new SqlParameter("@Password", txtPassword.Text));
                cmd2.Parameters.Add(new SqlParameter("@Image", images));
                cmd2.ExecuteNonQuery();
                MessageBox.Show("User has been added!");
                Login frmLogin = new Login();
                frmLogin.Show();
            }  

我已经使用了cmd.Parameters.Add(......而不是cmd.Parameters.AddWithValue(....因为它会提供更多错误和异常..

2 个答案:

答案 0 :(得分:2)

您输入错误的原因是因为您的语法错误,但您的语法错误只是问题的部分

SQL injection attacks您的代码全开

使用参数化查询的正确方法是在查询中包含参数 。这将使调试更容易,因为你没有一千个串联字符串:

string query = "INSERT INTO ProfInfo(UserID,FirstName,MiddleName,LastName,Department,Username,Password,Image)  VALUES(@UserID, @FirstName, @MiddleName, @LastName, @Department, @Username, @Password, @Image)";

SqlCommand cmd2 = new SqlCommand(query , con2);
cmd2.Parameters.Add(new SqlParameter("@UserID", txtID.Text));            
cmd2.Parameters.Add(new SqlParameter("@FirstName", txtFirstName.Text));
cmd2.Parameters.Add(new SqlParameter("@MiddleName", txtMiddleName.Text));
cmd2.Parameters.Add(new SqlParameter("@LastName", txtLastName.Text));
cmd2.Parameters.Add(new SqlParameter("@Department", txtDep.Text));
cmd2.Parameters.Add(new SqlParameter("@Username", txtUsername.Text));
cmd2.Parameters.Add(new SqlParameter("@Password", txtPassword.Text));
cmd2.Parameters.Add(new SqlParameter("@Image", images));

然而,这不是你所有的问题。

除了大量SQL注入漏洞外,您还将密码存储为纯文本。这是一个可怕的想法。你需要 salt&在存储之前哈希您的密码。

我强烈建议花一些时间研究一些基本的安全主题,如SQL注入和密码腌制&散列。有大量免费资源可供使用。

答案 1 :(得分:0)

代码中的基本问题是您在用户名

附近的sql中错过了逗号,
+ "' '" + txtUsername.Text + "', '

使用

+ "', '" + txtUsername.Text + "', '
  

如其他答案中所述,让您的代码需要修复。喜欢 SQL注入

此外,您正在使用sqlcommand对象中的参数,但它们不在sql查询中。在查询中添加它们