我尝试使用表单中使用的数据向表中添加记录。我的代码如下所示:
private void button4_Click(object sender, EventArgs e)
{
using (SqlConnection connect = new SqlConnection(@"Data Source=(LocalDB)\v11.0;" +
@"AttachDbFilename=C:\Development\C-Sharp\LockItUp\Lockitup.mdf;Integrated Security=True"))
{
string theVault = @lblVault.Text.Replace(@"\", @"\\");
string stmt = @"INSERT INTO Users (username,password,folderloc,fullname,email,cellphone)" +
" VALUES ('" + txtUsrName.Text + "', '" + txtUserPassword.Text + "', '" + theVault + "', '" +
txtFullname.Text + "', '" + txtEmail.Text + "', '" + txtCellPhone.Text + "')";
using(SqlCommand cmd = new SqlCommand(stmt, connect))
{
try
{
connect.Open();
cmd.ExecuteNonQuery();
connect.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex);
return;
}
}
PanelSwitch("Home");
RefreshMenu();
}
}
但是,每次运行它时,都会收到错误消息'字符串或二进制数据将被截断。'我把错误指向了folderloc字段。目录进入其中。我目前正在尝试将值C:\ Development \ locker放入其中,但我不断收到错误。我该如何解决这个问题?
答案 0 :(得分:1)
您的代码存在多个问题。首先,要解决您收到的错误String or binary data would be truncated
。原因是表中的字段不足以存储数据。进入你的数据库并查看Users
表并查看每个字段并确保字段定义的宽度足以存储数据(例如,查找VARCHAR(20)
或其他内容并将其更改为某些内容比如VARCHAR(500)
)。
其次,正如@David建议的那样,您需要解决SQL注入问题。您正在将动态值直接插入SQL语句中。这是坏消息。 Microsoft对此主题有一个good article以及如何避免它。
第三,您不应将密码存储为纯文本。它们应该被盐渍和散列。请查看this article以获得有关此问题的详细教程。