Как вставить 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());
        }
    }
}

alt text


попробуйте ниже, удалив ToString () после DBNull.Значение

string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value:sbcId)));

SQLString.Null должен делать работу просто отлично:)


Если вы вставляете не строковое значение в базу данных 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";
     }

теперь вставьте в БД и проверьте у вас есть нулевое значение их логично