【问题标题】:How can I insert Special char from textbox in to SQL table (Special char like 's , " or like ♥ ♫ )..?如何将文本框中的特殊字符插入 SQL 表(特殊字符,如 's 、 " 或 ♥ ♫ )..?
【发布时间】:2014-03-30 16:28:31
【问题描述】:
string sql = "insert into tblmain values('" + txtName.Text + "','" + txtPost.Text + "','" + DropDownList1.SelectedItem + "')";

如果用户在 txtPost 中插入 My name's first later is D !,则会出现不允许使用 's 的错误。 您能否将代码发送给我以从 .net (C#) 的文本框中接受这种类型的字符。

【问题讨论】:

  • 使用parameterized queries 代替字符串连接。您的代码对SQL Injection 攻击开放。
  • 正如@SonerGönül 所说,您使您的网站容易受到 SQL 注入的攻击。请改用SqlCommand。您可以使用"insert into tblmain values(?,?,?)"。然后使用SqlCommand.Parameters.Add。

标签: c# sql .net


【解决方案1】:

您的示例是最纯粹形式的SQL injection 书籍示例。 ' 关闭前一个引号,其余 SQL 命令的解释与您的预期不同。

在处理非硬编码值和直接处理SqlConnection 时,没有任何理由不使用parametrized queries。

还可以查看这些articles 了解更多详细信息。近似样本(需要更多字段且不显示异常处理):

using (SqlConnection connection = new SqlConnection(connectionString))
{
  SqlCommand command = new SqlCommand("insert into tblmain values(@name")", connection);
  command.Parameters.Add("@name", SqlDbType.String);
  command.Parameters["@name"].Value = customerID;
  connection.Open();
  Int32 rowsAffected = command.ExecuteNonQuery();
  Console.WriteLine("RowsAffected: {0}", rowsAffected);
}

您可能遇到的第二个问题是,如果您为文本选择了错误的字段类型 - 为了能够存储您想要的字符,您需要 Unicode 字符串。详情请查看C#: DbType.String versus DbType.AnsiString 帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多