Как вставить ноль в базу данных? - PullRequest
7 голосов
/ 12 октября 2010

Привет, я пытаюсь вставить ноль в столбец базы данных в зависимости от значения datakeys gridview (если "" вставить ноль в базу данных) Тем не менее, я получаю пробел '' внутри столбца базы данных.

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

Ответы [ 8 ]

19 голосов
/ 12 октября 2010

Вы должны переписать свой код:

if(string.IsNullOrEmpty(sbcId))
    Parameters.Add(new OleDbParameter("EMPID", DBNull.Value)); 
else
    Parameters.Add(new OleDbParameter("EMPID", sbcId)); 

Проблема с троичным выражением if, которое у вас есть, заключается в том, что его возвращаемый тип всегда должен быть одинаковым, поэтому вы не можете его использовать (string и DbNull.Значение не совместимо)

8 голосов
/ 12 октября 2010

Используйте DBNull.Value, а не DBNull.Value.ToString. (С другими типами коллекции параметров в .NET просто будет работать null, но я не уверен на 100% в OleDbParameter).

Что касается третичного оператора. Не приводите к строке, но приводите строку к объекту:

sbcId=="" ? DBNull.Value : (object)sbcId
3 голосов
/ 12 октября 2010

Вам нужно использовать DBNull.Value, а не DBNull.Value.ToString()

DBNull.Value.ToString() is ''

Эта программа дает

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

1 голос
/ 04 октября 2017

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

1 голос
/ 12 октября 2010

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

string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value:sbcId)));
0 голосов
/ 20 октября 2017

Я предпочитаю использовать метод расширения для обработки вместо нескольких операторов if. Это позволяет учитывать нулевые или пустые строковые значения. Также позволяет использовать его повторно.

    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())); 
0 голосов
/ 12 февраля 2016

ваша строка такая

string value = "";

добавьте следующую строку

 if (value == ""){

  value = "NULL";
     }

теперь вставьте в БД и проверьте, что у вас есть нулевое значение, чтобы они были логическими

0 голосов
/ 25 ноября 2015

Если вы вставите не строковое значение в базу данных доступа, вы можете написать запрос на вставку следующим образом

Вставить в tableName (столбец1, столбец2) значения (NULL, NULL);

Но вы хотите вставить нулевое значение в поле «Короткий текст» или «Длинный текст» при доступе. Вы можете написать запрос на вставку следующим образом

Вставить в tableName (column1, column2) значения ('', '');

...