【问题标题】:No value given for one or more required parameters in c#c# 中没有为一个或多个必需参数指定值
【发布时间】:2017-12-11 20:05:20
【问题描述】:

可能是我的问题被标记为重复,但我尝试了很多东西,但没有摆脱这个错误。

当我尝试将我的 c# 应用程序与 Access 数据库连接时,会显示此异常。这是我的代码

    using (var Con = Connections.Create())
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {
                        cmd.Connection = Con;
                        cmd.CommandText = "Select Name, Id, Center, ClientCode, imgImage, SMSAPI, SenderId, SMSUserName from AdminControl where UserName= @p1 and [Password] = @p2 ";
                        Con.Open();
                        cmd.Parameters.AddWithValue("@p1", txtUserName.Text);
                        cmd.Parameters.AddWithValue("@p2", txtPassword.Text);
//                        cmd.Parameters.Add("@p1", txtUserName.Text); Tried this too
//                        cmd.Parameters.Add("@p2", txtPassword.Text); 
                        using (OleDbDataReader LoginDr = cmd.ExecuteReader())
                        {
                            if (LoginDr.HasRows)
                            {
                                while (LoginDr.Read())
                                {
                                    // My work
                                }
                            }
                        }
                    }
                }

我在这里做错了什么?

【问题讨论】:

  • 代替... UserName= ? ...试试... UserName= @p1 ...
  • 我尝试了所有但同样的问题
  • 请用您尝试过的内容更新您的帖子。
  • @mjwills 我更新了我的帖子。当我执行我的代码以下代码向我显示错误using (OleDbDataReader LoginDr = cmd.ExecuteReader())

标签: c# ms-access


【解决方案1】:

Solved Guys... 问题出在我的查询中。

cmd.CommandText = "Select Name, Id, Center, ClientCode, imgImage, SMSAPI, SenderId, SMSUserName from AdminControl where [UserName] = @p1 and [Password] = @p2;";

实际上Name 是MS-Access 的保留关键字,每次我执行我的代码时它都期待Name 参数。我刚刚用FullName 重命名了该字段,并在我的查询中也进行了相同的更改。

cmd.CommandText = "Select FullName, Id, Center, ClientCode, imgImage, SMSAPI, SenderId, SMSUserName from AdminControl where [UserName] = @p1 and [Password] = @p2;";                    

谢谢大家。

【讨论】:

    【解决方案2】:

    试试这个: 在定义参数时不要使用'@':

    cmd.Parameters.AddWithValue("UserName", txtUserName.Text);
    cmd.Parameters.AddWithValue("Password", txtPassword.Text);
    

    并像这样查询:

    where UserName= ? and Password = ?
    

    【讨论】:

      【解决方案3】:

      你忘记更换了?用有效参数标记。

         using (var Con = Connections.Create())
                  {
                      using (OleDbCommand cmd = new OleDbCommand())
                      {
                          cmd.Connection = Con;
                          cmd.Parameters.AddWithValue("@UserName", txtUserName.Text);
                          cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
                          cmd.CommandText = "Select Name, Id, Center, ClientCode, imgImage, SMSAPI, SenderId, SMSUserName from AdminControl where [UserName]= ? and [Password] = ? ";
                          Con.Open();                        
                          using (OleDbDataReader LoginDr = cmd.ExecuteReader())
                          {
                              if (LoginDr.HasRows)
                              {
                                  while (LoginDr.Read())
                                  {
                                      // My work
                                  }
                              }
                          }
                      }
                  }
      

      【讨论】:

      • 感谢您的回复。但还是同样的问题
      • 您能否在调用此代码之前确认用户名和密码文本框已填充值?
      • 是的...我检查了断点。两个文本框都有值。
      • Sorry move parameters above sql query update了我的答案。
      • 我怀疑查询有问题尝试删除参数并直接在查询中添加“用户名”和“密码”,请参考stackoverflow.com/questions/24337996/…
      猜你喜欢
      • 2015-09-09
      • 1970-01-01
      • 2011-01-23
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多