Как вставить 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";
}
теперь вставьте в БД и проверьте у вас есть нулевое значение их логично