【问题标题】:Error when trying to connect a web service with a database尝试将 Web 服务与数据库连接时出错
【发布时间】:2016-10-27 14:18:13
【问题描述】:

我收到此错误:

错误 CS1502:'System.Data.SqlClient.SqlConnection.SqlConnection(string, System.Data.SqlClient.SqlCredential)' 的最佳重载方法匹配有一些无效参数

错误 CS1503:参数 2:无法从“System.Data.SqlClient.SqlConnection”转换为“System.Web.WebPages.HelperResult”

这是我的代码:

public string NumeroFactura(string NoDeFactura)
{
        string DtsConnection = "ITLIGENCIA-POS\\SQLEXPRESS; Initial Catalog = SSOLINVBASESQL; Trusted_Connection = Yes";
        SqlConnection Con = new SqlConnection(DtsConnection);
        Con.Open();

        SqlDataAdapter CMD = new SqlConnection("select * from INVE_FACTURAS_PRODUCTOS_ENC where NFACTURA='"+ NoDeFactura+ "'",Con);
        DataSet DS = new DataSet();
        CMD.Fill(DS, "DATOS");

        DataTable TableNFACTURA = DS.Tables[0];
        string NFACTURA = TableNFACTURA.Rows[0]["NFACTURA"].ToString();

        return "El número de factura es" + NFACTURA;
}

【问题讨论】:

  • 想想如果恶意用户可以在 NoDeFactura 中输入一些文本并输入 blah'; DROP TABLE INVE_FACTURAS_PRODUCTOS_ENC;-- 会发生什么
  • 只是一个想法:C# 中的常见做法是不将局部变量或方法参数的名称大写。当您使用标题大小写时(例如“DtsConnection”),它看起来像一个类名或方法名,而当您使用全部大写(例如“NFACTURA”)时,它看起来像一个常量的名称。使用驼峰式大小写(“dtsConnection”、“con”、“cmd”等)将使您的代码更具可读性。

标签: c# sql-server asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

SqlDataAdapter CMD = new SqlConnection(...

应该是

SqlDataAdapter CMD = new SqlDataAdapter(...

另外,查看“SQL 注入”和“参数化查询”,您正在做一些非常危险的事情。

当我这样做时,使用select *(以及SqlDataAdapter)来检索一行和一列并不是非常有效。你假设你会得到一排;如果NoDeFactura在数据库中不存在,TableNFACTURA.Rows[0]["NFACTURA"].ToString()会抛出空引用异常。

【讨论】:

    【解决方案2】:

    您缺少Data SourceServer 密钥。您的连接字符串应如下所示

    Server=ITLIGENCIA-POS\\SQLEXPRESS; Initial Catalog = SSOLINVBASESQL; Trusted_Connection = Yes
    

    【讨论】:

      猜你喜欢
      • 2014-03-08
      • 2014-06-09
      • 2017-08-13
      • 2020-02-07
      • 1970-01-01
      • 2021-09-23
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多