如何使用SqlCommand c#向SQL Server插入西里尔字母和其他特殊字符?

时间:2016-07-31 07:26:31

标签: c# sql-server

我创建了一个简单的应用程序,有助于翻译我用C#编写的网站和应用程序。但是我不知道如何在SQL Server中插入特殊字符,我之前使用过MySql和PHP。现在,当我在C#中使用此命令向我的数据库插入特殊字符时,我只看到???????个字符:

using (SqlCommand sqlCmd = new SqlCommand())
{
    sqlCmd.Connection = connection;
    sqlCmd.CommandType = CommandType.Text;

    sqlCmd.CommandText = "INSERT INTO dbo.Translations(TranslationKey,TranslationValue,FromLanguageKey,ToLanguageKey) VALUES (@TranslationKey, @TranslationValue, @FromLanguageKey, @ToLanguageKey)";

    sqlCmd.Parameters.AddWithValue("@TranslationKey", item.TranslationKey);
    sqlCmd.Parameters.AddWithValue("@TranslationValue", item.TranslationValue);
    sqlCmd.Parameters.AddWithValue("@FromLanguageKey", item.FromLanguageKey);
    sqlCmd.Parameters.AddWithValue("@ToLanguageKey", item.ToLanguageKey);

    try
    {
        connection.Open();
        sqlCmd.ExecuteNonQuery();
        connection.Close();
    }
    catch (Exception ex)
    {
        connection.Close();
    }
}

有些教程编写了使用N语句,但如何将其与Parameters.AddWithValue一起使用?

1 个答案:

答案 0 :(得分:3)

首先,最重要的是。这样:

catch (Exception ex)
{
    connection.Close();
}

非常非常邪恶。您丢弃了有关可能发生的任何错误的所有信息。 如果您发现错误,请记录和/或显示错误。不要扔掉它们。像这样的代码将使调试成为一场噩梦。你可能想写的是:

try
{
    connection.Open();
    sqlCmd.ExecuteNonQuery();
}
finally
{
    connection.Close();
}

更好:使用using关键字。

现在关于小问题,本地化。您的代码是正确的(除了上面提到的那一点),您的数据类型可能不是。

由于您没有提供[mcve],因此您只能猜测,但最可能的原因是您应该使用varchartext列时使用nvarcharnvarchar(MAX)