我尝试了所有内容并搜索了相关主题,但没有任何作用。
这是我的代码
{
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(....因为它会提供更多错误和异常..
答案 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查询中。在查询中添加它们