【问题标题】:Trying to query within query but it doesn't work试图在查询中查询,但它不起作用
【发布时间】:2015-01-30 09:48:57
【问题描述】:

我正在尝试使用来自 SQL 的数据填充表,并且我必须在查询中进行查询才能获得预期的结果。

这是我想要做的:

// Queries
var transakcionet = db.Query("SELECT * FROM Ditari WHERE IDUrdheresa = @0", ID);

// IDKlientit has unique value so the below query will always return one row
var klienti = "SELECT cEmertimi_i_klientit FROM Klienti WHERE (IDKlientit = @0)";


<tbody>

@foreach(var transakcioni in transakcionet){
   <tr>
      // This works
      @foreach(var kontoja in db.Query(kontoTrans, transakcioni.IDKontos)){
         <td>@kontoja.cNumri_i_kontos</td>
      }
      // This is what is causing the error (i guess)
      @foreach(var klja in db.Query(klienti, transakcioni.IDKlientit)){
         <td>@klja.cEmertimi_i_klientit</td>
      }
   </tr>
</tbody>

我不知道我错过了什么,但是。

这是错误信息:

没有为一个或多个必需参数指定值。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.Data.OleDb.OleDbException:没有为一个或多个必需参数提供值。

【问题讨论】:

  • 你能展示db.Query的实现吗?
  • db = Database.Open("nameofdb");
  • 是属性transakcioni.IDKlientit 总是!= null
  • 是的,它是这张桌子的钥匙……

标签: c# sql foreach parameter-passing


【解决方案1】:

您的代码修复无效,但您的建议有效!

我处理了“当它为空时”,现在它按我想要的方式工作

这就是我所做的:

@foreach(var transakcioni in transakcionet){
  <tr>
     @foreach(var kontoja in db.Query(kontoTrans, transakcioni.IDKontos)){
             <td>@kontoja.cNumri_i_kontos</td>
         }
    @if(transakcioni.IDKlientit == null){
        <td>No name</td>
    }else {
            foreach(var kli in db.Query(klienti, transakcioni.IDKlientit)){
            <td>@kli.cEmertimi_i_klientit</td>
        }}

【讨论】:

  • 什么不起作用? Linq 似乎比 nullchecking 在 foreach 循环中更优雅。
【解决方案2】:

@webber2k6 是对的。 Query 有一些空值。

首先,确保它不会崩溃(您的文件顶部可能需要@using System.Linq):

@foreach(var transakcioni in transakcionet.Where(t => t.IDKontos != null && t.IDKlientit != null){
<tr>
    // This works
    @foreach(var kontoja in db.Query(kontoTrans, transakcioni.IDKontos)){
        <td>@kontoja.cNumri_i_kontos</td>
    }
    // This is what is causing the error (i guess)
    @foreach(var klja in db.Query(klienti, transakcioni.IDKlientit)){
        <td>@klja.cEmertimi_i_klientit</td>
    }
</tr>

但这并不能解释为什么值首先是null。显然,只有当那些 ID* 属性可以为空时,这才有意义,我猜,关于您收到的错误消息就是这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多