【问题标题】:insert special character into SQL Server 2008 database from c#从 C# 将特殊字符插入 SQL Server 2008 数据库
【发布时间】:2013-08-27 15:27:43
【问题描述】:

我想在 sqlserver 2008 数据库中插入特殊字符。例如 ('/@#&*$) 等

我尝试了以下代码,但它从原始字符串中删除了这些字符串。

string[] arrtime = postingtime.Split(',');
                            string sss = arrtime[1];
                            string sss1 = "EDT";
                            bool first2 = true;
                            string s33 = Regex.Replace(sss, sss1, (m) =>
                            {
                                if (first2)
                                {
                                    first2 = false;
                                    return "";
                                }

                                return sss1;

                            });

但我不想从原始字符串中删除这些字符串...因为我想插入法语语言数据并且删除这些特殊字符会改变句子的含义。

我的插入查询是:

  cn.Open();
        adp.InsertCommand = new SqlCommand("insert into ttt values('r=DE'S''C/pa-ge=1/$@')", cn);
        adp.InsertCommand.ExecuteNonQuery();
        cn.Close();

当我单击插入按钮时,它会给出错误(数据类型错误)。 我的问题是,插入带有特殊字符的字符串而不是删除这些字符。我想将这些字符从 c# 应用程序传递给我们的 sql server 2008。 提前谢谢

【问题讨论】:

  • 这就是不使用参数化查询的结果。

标签: c# sql


【解决方案1】:

像这样使用参数化查询:

using (SqlConnection cn = new SqlConnection(...))
{
    cn.Open();

    using (SqlCommand cmd = new SqlCommand("insert into ttt values (@testvalue)", cn))
    {
        cmd.Parameters.AddWithValue("@testValue", "r=DE'S'C@4593§$%");
        cmd.ExecuteNonQuery();
    }
}

【讨论】:

  • 它给出以下错误...字符串或二进制数据将被截断。该语句已终止。我在 sqlserver 端使用了 nvarchar()....但仍然错误。
  • 那么,数据库中的字段有多长?
  • @user2499974 那么,究竟您使用的列类型是什么?根据数据,至少应该是nvarchar(16)
  • nvarchar(150),它的大小是150
  • @user2499974 一个将近 200 个字符的字符串显然不能放入指定不能超过 150 个字符的数据库字段中......
【解决方案2】:

使用参数

adp.InsertCommand = new SqlCommand("insert into ttt values(@p1)", cn);
adp.InsertCommand.Parameters.Add(new SqlParameter("@p1", SqlDbType.NVarChar)).Value = "r=DE'S''C/pa-ge=1/$@";

【讨论】:

  • 它给出以下错误....[字符串或二进制数据将被截断。声明已终止]。
  • 增加列大小,例如NVARCHAR(MAX)
【解决方案3】:

您的插入查询容易受到 SQL 注入的影响。尝试使用 SqlParameters。并在 SQLServer 用户 NVarchar 数据类型中。

using (SqlConnection con = new SqlConnection(dc.Con))
            {
                using (SqlCommand cmd = new SqlCommand("insert into ttt values(@paramValue)", con))
                {

                    cmd.Parameters.AddWithValue("@paramValue", "r=DE'S'C@4593§$%");
                    con.Open();
                    cmd.ExecuteNonQuery();
                }

            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2020-08-30
    • 2018-02-26
    • 2013-03-25
    • 2010-12-10
    • 2016-02-18
    相关资源
    最近更新 更多