如何使用更新语句(C# sqlcommand)将 NCHAR 设置为空

How to set NCHAR to null with an update statement (C# sqlcommand)

我想知道如何使用更新语句将 nchar 列设置为空。我发现了这个:NULL value for int in Update statement

这表示您必须强制转换才能将非整数字段设置为 NULL

所以我尝试了以下方法:

commandText = 
  @"UPDATE Brukere 
      SET Engangskode = CAST(NULL AS NCHAR) 
    WHERE Navn = @navn AND Mobilnr = @mobilnr";

但是,当我执行此操作时,它仍然不会将列更新为 NULL。我投错了,还是别的什么?任何帮助将不胜感激:)

如果需要更长的代码片段:http://pastebin.com/8auKuk6Q

无需投射。 Juse 设置列 = null。没有引号,不过!

问题是您将局部变量 commandText 设置为更新语句而不是 command.CommandText。改为如下

command.CommandText = "UPDATE Brukere SET Engangskode=NULL WHERE Navn=@navn AND Mobilnr=@mobilnr";

而且我认为无论有没有转换都可以。

我会建议 NOT 到 "re-use" 你的示例中的 SqlCommand - 为 UPDATE 语句创建一个新的特定命令,像这样:

using (SqlConnection con = new SqlConnection(connectionString))
{
    con.Open();

    string bruker = Request.Cookies["Navn"].Value;
    string mobilnr = Request.Cookies["Mobilnr"].Value;

    string commandText = "SELECT Engangskode FROM Brukere WHERE Navn=@navn AND Mobilnr=@mobilnr";

    bool correctCode = false;

    try
    {
        using (SqlCommand command = new SqlCommand(commandText, con))
        {
            .....

            if (correctCode)
            {
                // DO NOT "reuse" the previous SqlCommand - create a new, specific one!
                string updateQuery = "UPDATE Brukere SET Engangskode = NULL WHERE Navn = @navn AND Mobilnr = @mobilnr;";

                using (SqlCommand updateCmd = new SqlCommand(updateQuery, con)
                {
                    updateCmd.Parameters.Add("@navn", SqlDbType.NVarChar, 20).Value = bruker;
                    updateCmd.Parameters.Add("@mobilnr", SqlDbType.NChar, 10).Value = mobilnr;

                    updateCmd.ExecuteNonQuery();

                    Response.Redirect("Kvittering.aspx",  false);
                }
            }
        }                                    
    }
    catch( .... )
    {
        .......
    }
}