C# 必须声明标量变量"@s";
我得到了错误 必须声明标量变量“@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.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;"