【问题标题】:converting a string to an acceptable SQL value将字符串转换为可接受的 SQL 值
【发布时间】:2014-07-18 21:28:39
【问题描述】:

我在将用户输入解析为 SQL 存储过程中的变量时遇到了困难。我使用 linq 作为中间人。

我的网络表单包含一个文本框,供用户输入搜索参数。此内容必须从 Text 解析为字符串,然后解析为 16 长度的 char。我正在查看的表中的数据是一个相同长度的字符。

所以,我尝试了以下方法:

public void GetASingleInvoice(string invoiceNumber)
    {
        char iNum = Convert.ToChar(invoiceNumber);

        var invoice = from SIMS_InvoiceNo in financedb.INVOICEs
                      where SIMS_InvoiceNo = iNum
                      select SIMS_InvoiceNo;
    }

但是第 6 行的 iNum 有一条漂亮的波浪线,告诉我我无法将类型“char”转换为
“(企业路径).Models.INVOICE”。

我是否破坏了 linq?
我这里有发票类:http://pastebin.com/da6PJxn6

编辑:我还尝试了双运算符 (==),这会导致指定此处使用单个运算符的错误。

注意:在 SQL 中更改列的类型不是一种选择。

【问题讨论】:

  • 在他们的答案中看到所有复制粘贴 `= iNum` 很有趣 :)

标签: c# sql linq linq-to-sql webforms


【解决方案1】:

您错过了提供专栏:

 var invoice = from Invoice in financedb.INVOICEs
         ----> where Invoice.SomeProperty == iNum
               select Invoice;

也在 linq 中你需要 == 而不是 =

【讨论】:

    【解决方案2】:

    您需要像这样指定INVOICE 类的属性:

    var invoices = from invoice in financedb.INVOICEs
                  where invoice.SIMS_InvoiceNo == iNum
                  select invoice;
    

    【讨论】:

    • 如果我使用它,会导致定义错误 - INVOICE 不包含 invoiceNumber 的定义。你的意思是说我应该在 ~.Invoice 中定义 invoiceNumber 吗?
    【解决方案3】:

    正确查询:

    var invoices = from i in financedb.INVOICEs
                   where i.SIMS_InvoiceNo == iNum
                   select i;
    

    或者,如果您想按编号开单张发票,则只需使用 FirstOrDefault 或 SingleOrDefault 方法:

    var invoice = financedb.INVOICEs.FirstOrDefault(i => i.SIMS_InvoiceNo == iNum);
    

    【讨论】:

    • @RoteKatze 顺便说一句,如果你要切换到实体框架(如果可能的话,我建议这样做),还有更方便的方法 Find,并且通过键获取实体看起来像 @987654324 @
    • 我计划在未来的项目中使用,但该系统即将停用。这只是一个可视化比较财务的小型 Intranet 程序:)
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多