将带有反斜杠的文本框中的字符串添加到数据库表中

时间:2016-02-18 18:19:23

标签: c# sql-insert backslash

我尝试使用表单中使用的数据向表中添加记录。我的代码如下所示:

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放入其中,但我不断收到错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的代码存在多个问题。首先,要解决您收到的错误String or binary data would be truncated。原因是表中的字段不足以存储数据。进入你的数据库并查看Users表并查看每个字段并确保字段定义的宽度足以存储数据(例如,查找VARCHAR(20)或其他内容并将其更改为某些内容比如VARCHAR(500))。

其次,正如@David建议的那样,您需要解决SQL注入问题。您正在将动态值直接插入SQL语句中。这是坏消息。 Microsoft对此主题有一个good article以及如何避免它。

第三,您不应将密码存储为纯文本。它们应该被盐渍和散列。请查看this article以获得有关此问题的详细教程。