C # - вставить ноль в таблицу SQL Compact Edition - PullRequest
4 голосов
/ 30 марта 2011

Я пытаюсь вставить некоторые данные в таблицу SQL Compact Edition, используя параметр. Моя таблица позволяет вставлять нулевое значение, но когда я запускаю свой код ниже, я не могу заставить его работать, потому что один из этих параметров иногда будет нулевым, и я хотел бы вставить нулевое значение в этот столбец, когда параметрированный равен нулю.

Что я могу исправить?

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();
            }
        }

Ответы [ 4 ]

8 голосов
/ 30 марта 2011

Я думаю, что вы можете передать DBNull.Value в качестве значения, когда оно равно нулю:

cmd.Parameters.AddWithValue("@parm2", (Name as object) ?? DBNull.Value);
4 голосов
/ 30 марта 2011

Проверьте, является ли ваш параметр == нулевым, и если да, то вставьте вместо него DBNull или пропустите параметр.

.NET-значения и SQL-значения различаются.

1 голос
/ 30 марта 2011

Возможно, источник этой проблемы находится в самой строке запроса SQL.Вы объявляете три параметра:

@parm1, @parm2 и - сосредотачиваетесь на правописании - @param3

И устанавливаете: @parm1, @parm1 и - сосредотачиваетесь наорфография - @parm3

Я предполагаю, что это может быть вызвано целым @parm3 против @param3 именования параметров.

0 голосов
/ 21 августа 2012

Я использую следующий метод расширения для установки обнуляемых параметров.

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);
        }
    }
...