我想要一些冗长的,乱糟糟的字符串,基本上将其转储到字符串数据库字段中。问题是我在文本搞乱插入查询时遇到各种问题。有没有办法可以忽略内容并编写全文而不用担心其中的内容?
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”'附近的语法不正确。
字符串')后面的未闭合引号。'
答案 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使用Add
和AddWithValue
之间的区别。 两者都可能有令人讨厌的惊喜。 (第一个使用int时为0 - 请参阅链接,第二个是当系统不知道完全你打算做什么时 - 请参阅this link和this one 。)