【问题标题】:C# - Insert null into SQL Compact Edition tableC# - 将 null 插入 SQL Compact Edition 表
【发布时间】:2011-03-30 08:53:13
【问题描述】:

我正在尝试使用参数将一些数据插入到 SQL Compact Edition 表中。我的表允许插入 null,但是当我在下面运行我的代码时,我无法让它工作,因为这些参数之一有时会为 null,我想在参数为 null 时将 null 插入该列。

我该如何解决这个问题?

string strConn = Properties.Settings.Default.SqlConnectionString;


        using (SqlCeConnection conn = new SqlCeConnection(strConn))
        {
            conn.Open();
            using (SqlCeCommand cmd = new SqlCeCommand("insert into table(ID, Name, Adress) values (@parm1, @parm2, @param3)", conn))
            {
                cmd.Parameters.AddWithValue("@parm1", ID);
                cmd.Parameters.AddWithValue("@parm2", Name);
                cmd.Parameters.AddWithValue("@parm3", Adress);

                cmd.ExecuteNonQuery();
            }
        }

【问题讨论】:

  • 您遇到什么错误?或者它根本不起作用?
  • 当value参数值为null时表示该参数未设置。
  • 在我看来它应该可以工作。想要就是问题。
  • 当所有参数都有值时没有问题,但其中一个为空我收到错误说参数尚未设置。
  • SQL 查询字符串中的一个参数名为@param3。您通过@parm3 设置@parm1。也许这就是问题所在?

标签: c# sql sql-server-ce


【解决方案1】:

我认为你可以将DBNull.Value 作为你的值传递给它:

cmd.Parameters.AddWithValue("@parm2", (Name as object) ?? DBNull.Value);

【讨论】:

  • 但是您需要将 Name 或 DBNull.Value 转换为对象(c# 编译器不会为您执行此操作)
  • 当我尝试这个时,我得到 Operator '??'不能应用于“字符串”和“System.DBNull”类型的操作数
  • 我认为 DBNull 是一个类,因此可以作为对象传递......但你可能是对的,我不能使用?在不同类型的两侧。
  • x ?? y 实际上是 x ? x : y 的简写。 x 和 y 必须是相同的类型,否则编译器会报错。我会尝试将名称转换为要查看的对象。
  • @Stephen - 可能只是一个错字,但它是x!=null ? x : y。这是对 null 的检查,而不是布尔检查。
【解决方案2】:

检查您的参数是否 == null,如果是,则插入 DBNull 代替它或省略参数。

.NET 空值和 SQL 空值是不同的。

【讨论】:

    【解决方案3】:

    也许这个问题的根源在于 SQL 查询字符串本身。 你声明了三个参数:

    @parm1@parm2 和 - 专注于拼写 - @param3

    然后你设置: @parm1@parm1 和 - 专注于拼写 - @parm3

    我的猜测是整个 @parm3@param3 参数命名可能会导致此问题。

    【讨论】:

      【解决方案4】:

      我使用以下扩展方法来设置可为空的参数。

      public static class SqlExtensions
          {
              public static void AddNullableParameterWithValue(this SqlCeCommand cmd, string name, object value)
              {
                  if (null != value)
                      cmd.Parameters.AddWithValue(name, value);
                  else
                      cmd.Parameters.AddWithValue(name, DBNull.Value);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        相关资源
        最近更新 更多