数据库中插入字符串

本文探讨了一次邮件系统BUG导致的邮件丢失问题,详细分析了问题的原因在于玩家发送的邮件内容中包含特殊字符,干扰了SQL语句的正常执行。提出了两种解决方案:一是将字符串类型数据转换为二进制数据进行存储;二是使用转义符对特殊字符进行转义。
最近邮件系统出了bug,是将邮件插入数据库失败,导致玩家的邮件丢失。

本来sql语句是:
insert into mail(ID,SOURNAME,DESTNAME,TAXT) values(1,"aaa","bbb","祝贺升级!!!!");
这样当然没有问题,可是有些玩家却偏偏喜欢发些复杂的东西,像这样的
insert into mail(ID,SOURNAME,DESTNAME,TAXT) values(1,"aaa","bbb","祝贺升级!!!! "^-^"");
表格里的字符串部分本来是用""包含的,可是玩家邮件正文的字符串里也包含了""这个符号,就像这样 "祝贺升级!!!! "^-^"",这样的会导致整条语句插入数据库失败
后果很严重,原因却很简单。

想出来2个办法:
一个是将字符串类型都转成二进制数据来插入,因为二进制是不用管符号的。这样写代码的时候简单了,可是如果要直接从数据库操作来读取这段数据,而不是通过程序重新转换成字符串,读出来的东西基本是看不懂的。
还有一个,是在插入数据库之前,将字符串中的""符号通通解析一边,用转义符"\""来替换掉,呵呵,更喜欢这个方式
在.NET框架中,C#常用于数据库交互,使用 ADO.NET 可实现与 SQL 数据库的连接和操作以插入字符串。以下为实现步骤及示例代码: 首先,要建立与 SQL 数据库的连接,需提供正确的连接字符串,其中包含服务器名称、数据库名称、用户凭据等信息。接着,创建 `SqlConnection` 对象并使用该连接字符串进行初始化。 然后,编写 SQL 插入语句,使用参数化查询可防止 SQL 注入攻击。创建 `SqlCommand` 对象,将 SQL 语句和 `SqlConnection` 对象传入。通过 `SqlCommand` 的 `Parameters` 属性添加参数,将需要插入字符串值赋给相应参数。 最后,打开数据库连接,调用 `SqlCommand` 的 `ExecuteNonQuery` 方法执行插入操作,操作完成后关闭连接。 以下是示例代码: ```csharp using System; using System.Data.SqlClient; class Program { static void Main() { // 数据库连接字符串 string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD"; // 要插入字符串 string stringToInsert = "这是要插入字符串"; // SQL 插入语句 string insertQuery = "INSERT INTO YourTableName (YourColumnName) VALUES (@Value)"; using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand command = new SqlCommand(insertQuery, connection)) { // 添加参数 command.Parameters.AddWithValue("@Value", stringToInsert); try { // 打开连接 connection.Open(); // 执行插入操作 int rowsAffected = command.ExecuteNonQuery(); Console.WriteLine($"插入 {rowsAffected} 行数据。"); } catch (Exception ex) { Console.WriteLine($"发生错误: {ex.Message}"); } } } } } ``` 在上述代码中,需将 `YOUR_SERVER_NAME`、`YOUR_DATABASE_NAME`、`YOUR_USERNAME`、`YOUR_PASSWORD` 替换为实际的数据库服务器名称、数据库名称、用户名和密码,`YourTableName` 和 `YourColumnName` 替换为实际的表名和列名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值