你好,我正在尝试根据GridView的DataKeys值在数据库列中插入null(如果为""则插入null)。但是,我在数据库列中得到了一个空格' '。
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value.ToString():sbcId)));
你好,我正在尝试根据GridView的DataKeys值在数据库列中插入null(如果为""则插入null)。但是,我在数据库列中得到了一个空格' '。
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value.ToString():sbcId)));
您需要重写您的代码:
if(string.IsNullOrEmpty(sbcId))
Parameters.Add(new OleDbParameter("EMPID", DBNull.Value));
else
Parameters.Add(new OleDbParameter("EMPID", sbcId));
你的三元if语句存在问题,它的返回类型必须始终相同,这就是为什么你不能使用它(字符串和DbNull.Value不兼容)。
使用 DBNull.Value
而不是 DBNull.Value.ToString
。在 .NET 中,对于其他参数集合类型,仅使用 null
也可以,但我对 OleDbParameter
不太确定。
至于三元运算符,请勿将其强制转换为字符串,而是将字符串强制转换为对象:
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());
}
}
}
Console.WriteLine("{0}", DBNull.Value.ToString());
就足够了。 - LokizFenrir我更喜欢使用扩展方法来处理,而不是多个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()));
尝试在 DBNull.Value 后面删除 ToString()。
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value:sbcId)));
SQLString.Null
应该可以很好地完成任务 :)
你的字符串就像这样
string value = "";
现在添加以下行
if (value == ""){
value = "NULL";
}
现在将其插入数据库并检查是否存在空值,这是合乎逻辑的。