C# 空数据时间值

C# 空数据时间值,c#,sql,asp.net,C#,Sql,Asp.net,嗨,我正在尝试为datetime(fechaNac)保存一个空值,但我做不到。是否可以在asp中使用我的通用代码 public int add(Cliente dato) { string cmdText = "insert into clientes values ( @nombre, @apellido,@telefono,@celular,@oldtelefono, @oldcelular, @dni , @fechaNac)";

嗨,我正在尝试为datetime(fechaNac)保存一个空值,但我做不到。是否可以在asp中使用我的通用代码

public int add(Cliente dato)
        {
            string cmdText = "insert into clientes values ( @nombre, @apellido,@telefono,@celular,@oldtelefono, @oldcelular, @dni , @fechaNac)";
            Dictionary<string, Object> parametros = new Dictionary<string, Object>();
            parametros.Add("@nombre", dato.Nombre);
            parametros.Add("@apellido", dato.Apellido);
            parametros.Add("@telefono", dato.Telefono);
            parametros.Add("@celular", dato.Celular);
            parametros.Add("@oldtelefono", dato.OldTelefono);
            parametros.Add("@oldcelular", dato.OldCelular);
            parametros.Add("@dni", dato.Dni);
            parametros.Add("@fechaNac", dato.FechaNac);
            try
            {
                return this.setData(cmdText, parametros);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo insertar el usuario en la base de datos", ex);
            }
        }


        public int setData(string cmdText, Dictionary<string, Object> listaParametros)
    {
        int res;
        using (SqlCommand cmd = new SqlCommand(cmdText, cn)) {
            foreach (KeyValuePair<string, Object> parametro in listaParametros) {
                cmd.Parameters.AddWithValue(parametro.Key, parametro.Value);
            }
            Conectar();
            try {
                res = cmd.ExecuteNonQuery();
            } catch (Exception ex) {
                throw new Exception("No se pudo insertar el dato", ex);
            } finally {
                Desconectar();
            }
        }
        return res;
    }
public int add(客户数据)
{
string cmdText=“插入到客户的值中(@nombre、@apellido、@telefono、@celular、@oldtelefono、@oldcellular、@dni、@fechaNac)”;
Dictionary参数=new Dictionary();
参数添加(“@nombre”,dato.nombre);
参数添加(“@apellido”,dato.apellido);
参数加上(“@telefono”,dato.telefono);
参数添加(“@celular”,dato.celular);
参数加上(“@oldtelefono”,dato.oldtelefono);
参数添加(“@oldcellular”,dato.oldcellular);
参数加上(“@dni”,dato.dni);
参数添加(“@fechaNac”,dato.fechaNac);
尝试
{
返回此.setData(cmdText,parametros);
}
捕获(例外情况除外)
{
抛出新的异常(“没有插入到usuario-en-la-base-de-datos中”,例如);
}
}
public int setData(字符串cmdText,字典listaParametros)
{
国际关系;
使用(SqlCommand cmd=newsqlcommand(cmdText,cn)){
foreach(ListaParametos中的KeyValuePair参数){
cmd.Parameters.AddWithValue(parametro.Key,parametro.Value);
}
Conectar();
试一试{
res=cmd.ExecuteNonQuery();
}捕获(例外情况除外){
抛出新异常(“无se pudo insertar el dato”,ex);
}最后{
Desconectar();
}
}
返回res;
}
提前感谢您的帮助!
Yanina

是的,但是您需要首先将它合并到
DBNull.Value

cmd.Parameters.AddWithValue(parametro.Key, parametro.Value ?? DBNull.Value);

感谢您的回答,它不起作用,这是我在代码中得到的sql异常,“列名或指定值​​与表的定义不一致。”听起来脚本还有其他不相关的问题。首先尝试在SSMS中解决这些问题,然后返回应用程序。另外,最好指定要插入的列-
insert-into-clientes(columnName1、columnName2等)值…
I调试应用程序时,唯一指定为null的参数是fechaNac。我找不到我做错了什么如果fechaNac不为null,那么它工作正常,在SSMS工作正常,请在
INSERT
语句中明确指定列。将表模式添加到问题中也可能会有所帮助。