c# - 参数缺失 C#、MYSQL (VS 2010)

标签 c# mysql visual-studio-2010

在此处输入代码我遇到了缺少参数“@comment”的错误。但是,我确信它不是空值,并且我已将所有必要的值传递到相应的参数中。

扫描代码几个小时后,我确信我的 SQL 命令没有丢失错误指出的“@comment”。

主程序将调用下面的方法并将相应的值传递给该方法。根据这些属性值,它将调用要使用的 8 个 sql 命令中的 1 个。

对于在这种情况下该怎么做有什么建议吗?谢谢。

在将属性值传递给方法之前,我使用以下代码来验证它们。

//-------Checklist 5-------
        itemID = "dnaIN"; type = "in";
        if (string.IsNullOrEmpty(lblD5.Text) == false)
        { objR.CheckBy = lblD5.Text; }
        else if (string.IsNullOrEmpty(lblD5.Text) == true)
        { objR.CheckBy = "0"; }

        if (string.IsNullOrEmpty(lblV5.Text) == false)
        { objR.VerifiedBy = lblV5.Text; }
        else if (string.IsNullOrEmpty(lblV5.Text) == true)
        { objR.VerifiedBy = "0"; }

        if (string.IsNullOrEmpty(lblsbC.Text) == false) // check if user type comments
        { objR.Comment = lblsbC.Text; }
        else
        { objR.Comment = "0"; }
        update = objR.update(formID, itemID, type);

//----------传递到下面的代码----------

string strConn = Convert.ToString(ConfigurationManager.ConnectionStrings["InternshipConnectionString"]);
SqlConnection conn = new SqlConnection(strConn);

SqlCommand cmd1 = new SqlCommand();

//program pass in 0 as null for checkby & verifiedby
if (_CheckBy != "0" && _VerifiedBy != "0" && type == "in") // user enter everything, system in 
{
cmd1 = new SqlCommand("UPDATE SystemIn SET CheckBy =@checkBy, VerifiedBy =@verifiedBy WHERE FormID =@formID AND ItemID =@itemID", conn);
 }

 else if (_CheckBy != "0" && _VerifiedBy == "0" && type == "in") // user enter checkBy only, 
 {
 cmd1 = new SqlCommand("UPDATE SystemIn SET CheckBy =@checkBy, VerifiedBy = NULL WHERE FormID =@formID AND ItemID =@itemID", conn);
 }
 else if (type == "in")
 {   
 cmd1 = new SqlCommand("UPDATE SystemIn SET CheckBy = NULL, VerifiedBy =NULL WHERE FormID =@formID AND ItemID =@itemID", conn);
  }

  else if (_CheckBy != "0" && _VerifiedBy != "0" && _Comment != "0" && type == "out") 
  {
  cmd1 = new SqlCommand("UPDATE SystemOut SET CheckBy =@checkBy, VerifiedBy =@verifiedBy, Comment=@comment WHERE FormID =@formID AND ItemID =@itemID", conn);
  }
  else if (_CheckBy != "0" && _VerifiedBy == "0" && _Comment == "0" && type == "out") 
  {
  cmd1 = new SqlCommand("UPDATE SystemOut SET CheckBy =@checkBy, VerifiedBy = NULL, Comment=NULL WHERE FormID =@formID AND ItemID =@itemID", conn);
  }
  else if (_CheckBy != "0" && _Comment != "0" && _VerifiedBy == "0" && type == "out")
  {
  cmd1 = new SqlCommand("UPDATE SystemOut SET CheckBy =@checkBy, VerifiedBy=NULL, Comment=@comment WHERE FormID =@formID AND ItemID =@itemID", conn);
  }
  else if (_CheckBy != "0" && _Comment == "0" && _VerifiedBy != "0" && type == "out")
  {
  cmd1 = new SqlCommand("UPDATE SystemOut SET CheckBy =@checkBy, VerifiedBy =@verifiedBy, Comment=NULL WHERE FormID =@formID AND ItemID =@itemID", conn);
   }
   else if (type == "out")
   {   
   cmd1 = new SqlCommand("UPDATE SystemOUT SET CheckBy = NULL, VerifiedBy = NULL, Comment=NULL WHERE FormID =@formID AND ItemID =@itemID", conn);
    }

    cmd1.Parameters.AddWithValue("@formID", formID);
    cmd1.Parameters.AddWithValue("@itemID", itemID);

    if (_CheckBy != "0")
    { cmd1.Parameters.AddWithValue("@checkBy", _CheckBy); }
    if (_VerifiedBy != "0")
    { cmd1.Parameters.AddWithValue("@verifiedBy", _VerifiedBy); }
    if (_Comment != "0")
    { cmd1.Parameters.AddWithValue("@comment", _Comment); }

最佳答案

显然,代码中的最后两行对错误消息很重要。
仅当 _Comment"0" 时,@comment 才会丢失。
如果你总是必须传递@comment,那么将其更改为:

if (_Comment != "0")
    { cmd1.Parameters.AddWithValue("@comment", _Comment); }
else
    { cmd1.Parameters.AddWithValue("@comment", null); }

关于c# - 参数缺失 C#、MYSQL (VS 2010),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831982/

相关文章:

c# - 保存附件

c# - Reflection.Emit 优于 GetValue 和 SetValue :S

c# - WPF:解析几何忽略语言

mysql - 需要专家帮助解决空间数据查询的微小变化

java - 无法使用 mysqldump 创建备份 sql 文件

sql-server - Visual Studio 2010 和 SQL Server

.net - 无法在 Visual Studio 2010 中以 .NET 2.0 为目标

c++ - 如何使用 __stdcall 来限定 C++ lambda?

c# - 防止访问已处置的引用

mysql - 将表的列复制到另一个表 SQL