Как вставить null в базу данных?
Привет я пытаюсь вставить null в столбец базы данных в зависимости от значения GridView datakeys (если "" вставить null в базу данных) Тем не менее, я получаю пробел '' внутри столбца базы данных.
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value.ToString():sbcId)));
8 ответов
вы должны переписать свой код:
if(string.IsNullOrEmpty(sbcId))
    Parameters.Add(new OleDbParameter("EMPID", DBNull.Value)); 
else
    Parameters.Add(new OleDbParameter("EMPID", sbcId)); 
проблема с тернарным оператором if заключается в том, что его returntype всегда должен быть одинаковым, поэтому вы не можете его использовать (string и DbNull.Значения не совместимы)
использовать DBNull.Value, а не DBNull.Value.ToString. (С другими типами коллекций параметров в .NET просто используя null также будет работать, но я не уверен на 100% о OleDbParameter).
Что касается третичного оператора. Не бросайте в строку, но бросьте строку в object:
sbcId=="" ? DBNull.Value : (object)sbcId
вам нужно использовать DBNull.Value не DBNull.Value.ToString() 
DBNull.Value.ToString() это "
эта программа дает
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("'{0}'", DBNull.Value.ToString());
        }
    }
}

попробуйте ниже, удалив ToString () после DBNull.Значение
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value:sbcId)));
Если вы вставляете не строковое значение в базу данных access, вы можете написать запрос insert таким образом
вставить в tableName (column1,column2) значения (NULL, NULL);
но вы хотите вставить нулевое значение в короткий текст или длинное текстовое поле в access вы можете написать запрос вставки таким образом
вставить в tableName (column1, column2) значения (",");
Я предпочитаю использовать метод расширения для обработки вместо нескольких операторов if. Это позволяет учитывать значения null или пустые строковые значения. Также позволяет ему быть многоразовым.
    public static object GetDBNullOrValue<T>(this T val)
    {
        bool isDbNull = true;
        Type t = typeof(T);
        if (Nullable.GetUnderlyingType(t) != null)
            isDbNull = EqualityComparer<T>.Default.Equals(default(T), val);
        else if (t.IsValueType)
            isDbNull = false;
        else if (t == typeof(string) && val != null)
        {
            string temp = val as String;
            isDbNull = (temp == String.Empty);
        }
        else
            isDbNull = (val == null);
        return isDbNull ? DBNull.Value : (object)val;
    }
тогда вы можете использовать
     Parameters.Add(new OleDbParameter("EMPID", sbcId.GetDBNullOrValue())); 
ваша строка, как это
string value = "";
теперь добавьте следующую строку
 if (value == ""){
  value = "NULL";
     }
теперь вставьте в БД и проверьте у вас есть нулевое значение их логично
