如何将长杂乱的文本写入数据库

时间:2018-04-30 12:18:02

标签: c# sql

我想要一些冗长的,乱糟糟的字符串,基本上将其转储到字符串数据库字段中。问题是我在文本搞乱插入查询时遇到各种问题。有没有办法可以忽略内容并编写全文而不用担心其中的内容?

string connectionstring = @"connectionstring omitted"; // Omitted
using (SqlConnection sqlConnection = new SqlConnection(connectionstring))
{
    try
    {
        sqlConnection.Open();

        string s = " This is an email
           It has very  bad spacing and other special characters such as '' and (), it includes contact info like:

           John@john.com
           Tel :Office +(27) 082345674 3435667 / Mobile +(23)83562 4326556423
           Email: john@john123.com
           More complex numbers (1234) (122445123) ";

        SqlCommand command = new SqlCommand();
        command.CommandType = CommandType.Text;
        command.Connection = sqlConnection;
        command.CommandText = "INSERT INTO [dbo].[Emails] ([EmailText]) VALUES('" + s + "')";

        command.ExecuteNonQuery();
    }
    catch(Exception e)
    {
        throw e;
    }
}

如何在没有查询问题的情况下保存此文本?

这是错误:

  

System.Data.SqlClient.SqlException:'' ve'附近的语法不正确。
  在预期条件,接近'的上下文中指定的非布尔类型的表达式。
  在预期条件的上下文中指定的非布尔类型的表达式,具有'。
  '附近的语法不正确。
  “#required”'附近的语法不正确。
  字符串')后面的未闭合引号。'

1 个答案:

答案 0 :(得分:1)

您使用Parameterized Query。这样可以防止this answer中提到的攻击。<​​/ p>

This answer有示例代码。

正如评论中所建议的,here is a link to the docs of SqlCommand.Parameters

以下是代码的一般概念:

string command = "SOMESQL @someId SOMEMORESQL";
SqlCommand sqlCommand = new SqlCommand(command, connection);
sqlCommand.Parameters.AddWithValue("@someId", theData);

我建议您查看this answer使用AddAddWithValue之间的区别。 两者都可能有令人讨厌的惊喜。 (第一个使用int时为0 - 请参阅链接,第二个是当系统不知道完全你打算做什么时 - 请参阅this linkthis one 。)