参数化查询无法使用c#和SQL Server插入值

参数化查询无法使用c#和SQL Server插入值,c#,sql-server,sql-server-2008,C#,Sql Server,Sql Server 2008,我有一个参数化查询,它工作正常,但当我删除de DB并再次创建它时,使用相同的值和所有内容,它会抛出一个异常,表示它不能使用值sexo插入值NULL,但所有值都已赋值,下面是代码: try{ var cmdPersona_Log = new SqlCommand(); cmdPersona_Log.Parameters.Clear(); cmdPersona_Log.Connection = mySqlConnection; cmdPers

我有一个参数化查询,它工作正常,但当我删除de DB并再次创建它时,使用相同的值和所有内容,它会抛出一个异常,表示它不能使用值sexo插入值NULL,但所有值都已赋值,下面是代码:

    try{
      var cmdPersona_Log = new SqlCommand();
      cmdPersona_Log.Parameters.Clear();
      cmdPersona_Log.Connection = mySqlConnection;
      cmdPersona_Log.CommandType = CommandType.Text;
      cmdPersona_Log.CommandText = @"INSERT INTO [Tomin].[TominRH].[Persona_Log] "
       + "([Id_Action],[Id_User],[Id_Date],[Id_Entidad],[Nombre],[Paterno],[Materno],[Sexo],[Id_Nacionalidad])"
       + " Values (1, 'Admin', @fecha, @id_entidad, @nombre, @paterno, @materno, @sexo, 52)";
      cmdPersona_Log.Parameters.AddWithValue("@fecha", DateTime.Now);
      cmdPersona_Log.Parameters.AddWithValue("@id_entidad", dbRow["CUENTA"].ToString().Trim());
      cmdPersona_Log.Parameters.AddWithValue("@nombre", nombre ?? string.Empty);
      cmdPersona_Log.Parameters.AddWithValue("@paterno", paterno ?? string.Empty);
      cmdPersona_Log.Parameters.AddWithValue("@materno", materno ?? string.Empty);
      cmdPersona_Log.Parameters.AddWithValue("@sexo", 1);
      cmdPersona_Log.ExecuteNonQuery();
   }
   catch(Exception e) 
   {
      MessageBox.Show(dbRow["CUENTA"] + " Persona_log  " + e.ToString());
   } 

我已经检查了数据库,似乎没有问题,任何建议???

请确保在INSERT子句中列出了表中所有假定为非空的字段

您可能会遇到这样的情况,
AddWithValue
无法正确推断
位的参数类型。使用
true
/
false
而不是
1
/
0

cmdPersona_Log.Parameters.AddWithValue("@sexo", true);

你试过用这个表格吗
cmd.Parameters.Add(“@SomeID”,SqlDbType.Int,4).Value=


在哪里可以明确显示SqlDbType?

选中。。。该表有10个参数,9个不能为空,这些是我发送的参数…@poz2k4444你能给出创建该表的sql表达式吗?我不知道为什么,但已经没有问题了,我离开该项目几天,突然一切正常:S,无论如何,谢谢你的帮助…nombre是什么类型的,paterno和materno?字符串,但问题是sexo,我忘了说…尝试使用
true
而不是1,与
AddWithValue
完全相同的问题,数据类型有点不布尔,我不知道是否相同,但我认为它是带有参数化值的……在
SQL
中并没有
Boolean
类型。SQL中的
在.NET中被转换为
bool
,反之亦然。是的,我不能插入NULLvalue@poz2k4444如果你去掉了参数,把sql改为使用1而不是sexo参数,会发生什么?同样的例外,我改为参数化查询,因为我有你说的我不知道为什么,但是没有问题了,我离开了项目几天,突然一切都很好:S,无论如何,谢谢你的帮助…+1在与原作者交谈后,这个建议,正如我们都预期的那样,解决了问题。见我的答案后附的评论。我怀疑(尽管未经证实)代码更改不是在两次运行之间生成的。我不知道为什么,但已经没有问题了,我离开了项目几天,突然一切正常:S,无论如何,谢谢你的帮助…我以前遇到过这个问题,项目没有真正运行对代码所做的重新构建的更改,因此即使在修复了损坏的代码之后,仍然可以有效地重新运行它。这有时会导致对代码进行更大程度的破坏,因为编辑显然不会导致行为上的任何改变。只是出于兴趣,您的工作代码是否与原始帖子完全相同?我相信我们中的一些人认为,
cmdPersona\u Log.Parameters.AddWithValue(“@sexo”,1)不起作用。我的代码正在使用cmdPersona_Log.Parameters.AddWithValue(“@sexo”,true);这是我做的最后一次改变,然后我离开了项目几天。。。我怎么知道代码什么时候运行以及我所做的更改??全部重建。另外,如果您怀疑您的最新更改没有被使用,那么可以通过在必须执行的代码中抛出异常来故意破坏它。如果没有引发异常,则不会使用代码更改。@user:1081897和我都怀疑您需要更改
cmdPersona_Log.Parameters.AddWithValue(“@sexo”,1)
to
cmdPersona\u Log.Parameters.AddWithValue(“@sexo”,true)并已按此进行了注释。从你的回答来看,它确实不起作用。我认为值得编辑和投票D Stanley,以帮助这个问题的未来观众。我确实更改了
cmdPersona_Log.Parameters.AddWithValue(“@sexo”,1)
to
cmdPersona\u Log.Parameters.AddWithValue(“@sexo”,true)这是我做的最后一次更改,当它抛出一个异常时,它总是抛出上面提到的异常,突然它没有,我不知道为什么,但代码现在工作得很完美,无论如何我感谢你们的帮助,非常感谢!