Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 必须声明标量变量"@s";_C#_Sql Server - Fatal编程技术网

C# 必须声明标量变量"@s";

C# 必须声明标量变量"@s";,c#,sql-server,C#,Sql Server,我得到了错误 必须声明标量变量“@s” 在文本框中,我取s.SalesInvoiceID的值。我如何修复错误?请回答我正确的查询不太确定目的是什么,但您的Select语句缺少一个Group by或Over子句,无法与总和一起使用。此外,Select中的参数名称必须与Parameters.AddWithValue中使用的名称匹配。也许是这样的 CmdString = "SELECT s.TotallBill - s.Advance - SUM(iph.Amount) AS RemainingBal

我得到了错误

必须声明标量变量“@s”


在文本框中,我取
s.SalesInvoiceID
的值。我如何修复错误?请回答我正确的查询

不太确定目的是什么,但您的Select语句缺少一个Group by或Over子句,无法与总和一起使用。此外,Select中的参数名称必须与Parameters.AddWithValue中使用的名称匹配。也许是这样的

CmdString = "SELECT s.TotallBill - s.Advance - SUM(iph.Amount) AS RemainingBalance FROM SalesInvoice s INNER JOIN InstallmentPaymentHistory iph ON iph.SalesInvoiceId = s.SalesInvoiceID WHERE  [s.SalesInvoiceID] = @s.SalesInvoiceID";

try
{
    SqlCommand cmd = new SqlCommand(CmdString, con);
    cmd.Parameters.AddWithValue("@SalesInvoiceID", txtSIN2.Text);

    using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
    {
        DataTable dt = new DataTable("SalesInvoice");
        sda.Fill(dt);

        foreach (DataRow dr in dt.Rows)
        {
            txtBalance2.Text = (dr["RemainingBalance"].ToString());
        }
    }
}
catch (Exception exp)
{
    MessageBox.Show(exp.ToString());
}

我向后看了看。我并不擅长Transact-SQL,但我认为Inner实际上是一个左连接或仅连接,s.SalesInvoiceID属于左侧。

其中[s.SalesInvoiceID]=@s.SalesInvoiceID
替换为
其中[s.SalesInvoiceID]=@SalesInvoiceID
@JohnLBevan现在得到错误“必须声明标量变量”@SalesInvoiceID“您试图根据名为
@salesvoiceid
的变量中保存的发票ID选择数据,但该变量未在任何位置声明,也未为其分配值。”。设置CmdString时,需要在字符串中输入要查找的发票的实际id,而不是变量名。我认为您的代码应该是“…where[s,SalesInvoiceID]=”+SalesInvoiceID(或者您的C#程序中的任何变量都有要找到的ID)@JohnRC No,您永远不应该连接SQL语句。您可能面临SQL注入的风险。OP仅正确使用了参数,但没有获得匹配的名称。一些不相关的提示:
SqlCommand
IDisposable
因此应该位于
using
块中。你可能想看看。如果这是英语,
total
应该只有一个
l
"SELECT 
s.SalesInvoideID
s.TotallBill, 
s.Advance, 
sum(iph.Amount) as RemainingBalance 
from SalesInvoice s 
inner join InstallmentPaymentHistory iph 
on 
s.SalesInvoiceID =iph.SalesInvoiceId
where 
[s.SalesInvoiceID]=@SalesInvoiceID"
Group By s.SalesInvoiceID;"