【发布时间】:2021-07-12 18:51:28
【问题描述】:
我正在开发一个密码存储应用程序,用户必须输入文件名,从组合框中选择文件扩展名,然后在提供的文本框中键入文件内容。文件名和扩展名仅适用于他们选择导出它。我插入数据库的大部分数据工作正常,并且可以毫无问题地插入/能够从 SQL Server 数据库中检索。但是一旦我的文件内容包含诸如“”/'/()/等字符,它就会给我错误
System.Data.SqlClient.SqlException: 't' 附近的语法不正确。 字符串')'后的非闭合引号。'
如何才能将文件内容字符串插入到数据库中,与输入到文本框中的内容完全相同:这是单击保存文件按钮后插入的代码,其中出现初始错误:
private void btnSaveFile_Click(object sender, EventArgs e)
{
string extensionType = comboExtension.GetItemText(comboExtension.SelectedItem);
if (txtFileName.Text == "")
{
MessageBox.Show("Please Enter A Valid File Name", "Please Fill In", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (!txtFileName.Text.All(char.IsLetterOrDigit))
{
MessageBox.Show("File Name can only contain letters or numbers, No Special Characters", "Incorrect Input", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtFileName.Clear();
}
else if (extensionType == "")
{
MessageBox.Show("Please Select An Extension Type", "Select File Type", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else if (txtDescription.Text.Length > 7999)
{
MessageBox.Show("File content cannot exceed 8000 characters", "Characters Exceeded", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else {
string fname = txtFileName.Text;
string content = txtDescription.Text;
string forUser = Form1.userId;
string dateAdded = DateTime.Now.ToString();
connection.Open();
cmd = new SqlCommand("insert into [Files] values('" + fname + "', '" + extensionType + "', '" + content + "', '" + dateAdded + "', '" + forUser + "')", connection);
cmd.ExecuteNonQuery();
connection.Close();
this.Alert("File Created Successfully");
this.Alert("File Created Successfully");
txtFileName.Clear();
txtDescription.Clear();
comboExtension.Text = ("File Extension");
}
}
【问题讨论】:
-
Parameters 会解决你的问题。
-
神送保护系统强制你使用参数。
-
你没有使用
parameters,你也不是sanitizing你的输入。尝试输入以下内容作为文件名 "myfile';delete files--" -
@ZwakeleSibisi:你有没有看一下人们发布的链接?有例子。
标签: c# sql-server visual-studio winforms .net-framework-version