峰峦@叠嶂 2025-01-06 18:27 采纳率: 98%
浏览 11
已结题

根据产品名称,查询出入库数量,但报错请看看原因,解答一下

这段代码,我是根据第一个产品模板表里面将产品名称proName,和规格spec,都查询出来后,再在ERP的出入库表里面,根据产品名称和规格,将对应的出入库数量再查询出来,但在运行是总提示如下错误,请问是什么原因,指导一下,谢谢

img



```c#

private void btnquery_Click(object sender, EventArgs e)
{
    string connstring1 = "server=192.168.100.247;database=WHMesInfo;user=sa;password=whyy";
    string connstring2 = "server=192.168.2.5;database=AIS20150211135927;user=sa;password=zzzx";

    using (SqlConnection Conn1 = new SqlConnection(connstring1))
    {
        Conn1.Open();

        DataTable dtM = new DataTable();          

        string sqlstringM = @"select proName,spec,target  from w_target  ";

        SqlCommand cmdM = new SqlCommand(sqlstringM, Conn1);

        SqlDataAdapter sdaM = new SqlDataAdapter(cmdM);

        sdaM.Fill(dtM);

        // 将所有产品名称和规格提取出来,构造一个 SQL 查询。
        List<string> proNames = new List<string>();
        List<string> specs = new List<string>();

        foreach (DataRow row in dtM.Rows)
        {
            string proName = row["proName"].ToString();
            string spec = row["spec"].ToString();
            proNames.Add(proName);
            specs.Add(spec);
        }

        // 使用 String.Join 来拼接字符串,构造 IN 子句
        string proNameList = string.Join(",", proNames.Select(p => $"'{p}'"));
        string specList = string.Join(",", specs.Select(s => $"'{s}'"));
                    
         using (SqlConnection Conn2 = new SqlConnection(connstring2))
            {

                Conn2.Open();

                DateTime StartTime = Convert.ToDateTime(Startdate.Text);
                DateTime EndTime = Convert.ToDateTime(Enddate.Text);

                string sqlstringK = @" SELECT
                            proName,Fmodel,SUM(DayInAmount) AS DayInAmount,SUM(MonthInAmount) AS MonthInAmount, SUM(YearInAmount) AS YearInAmount,
                            SUM(DayOutAmount) AS DayOutAmount,sum(MonthOutAmount) AS MonthOutAmount,sum(YearOutAmount) AS YearOutAmount
                            FROM (
                            SELECT DISTINCT  t3.FName AS proName, t3.Fmodel AS Fmodel, SUM(t1.FQty) AS DayInAmount, 0 AS MonthInAmount, 0 AS YearInAmount,
                                0 AS DayOutAmount,0 AS MonthOutAmount,0 AS YearOutAmount
                            FROM
                                ICStockBill t2
                                JOIN ICStockBillEntry t1 ON t1.FInterID = t2.FInterID
                                JOIN t_icitem t3 ON t3.FItemID = t1.FItemID
                                JOIN ICTransactionType t5 ON t2.FTranType = t5.FID
                                JOIN t_StockPlace t4 ON t4.FSPID = t1.FDCSPID
                            WHERE
                                t2.FTranType = '2' AND (t4.FSPID = '2' OR t4.FSPID = '1')  AND t2.FDate = @EndTime and t3.FName IN ({proNameList}) and t3.Fmodel IN ({specList})
                            GROUP BY t3.FName, t3.FModel

                            UNION

                            SELECT DISTINCT t3.FName AS proName,t3.Fmodel AS Fmodel,0 AS DayInAmount,SUM(t1.FQty) AS MonthInAmount,0 AS YearInAmount,
                                0 AS DayOutAmount,0 AS MonthOutAmount,0 AS YearOutAmount
                            FROM
                                ICStockBill t2
                                JOIN ICStockBillEntry t1 ON t1.FInterID = t2.FInterID
                                JOIN t_icitem t3 ON t3.FItemID = t1.FItemID
                                JOIN ICTransactionType t5 ON t2.FTranType = t5.FID
                                JOIN t_StockPlace t4 ON t4.FSPID = t1.FDCSPID
                            WHERE
                                t2.FTranType = '2'AND (t4.FSPID = '2' OR t4.FSPID = '1') AND t2.FDate BETWEEN @StartTime AND @EndTime and t3.FName IN ({proNameList}) and t3.Fmodel IN ({specList})
                            GROUP BY t3.FName, t3.FModel

                            UNION

                            SELECT DISTINCT t3.FName AS proName,t3.Fmodel AS Fmodel, 0 AS DayInAmount,0 AS MonthInAmount, SUM(t1.FQty) AS YearInAmount,
                                0 AS DayOutAmount,0 AS MonthOutAmount,0 AS YearOutAmount
                            FROM
                                ICStockBill t2
                                JOIN ICStockBillEntry t1 ON t1.FInterID = t2.FInterID
                                JOIN t_icitem t3 ON t3.FItemID = t1.FItemID
                                JOIN ICTransactionType t5 ON t2.FTranType = t5.FID
                                JOIN t_StockPlace t4 ON t4.FSPID = t1.FDCSPID
                            WHERE
                                t2.FTranType = '2' AND (t4.FSPID = '2' OR t4.FSPID = '1') AND t2.FDate BETWEEN '2024-1-1'  AND  @EndTime and t3.FName IN ({proNameList}) and t3.Fmodel IN ({specList})
                            GROUP BY t3.FName, t3.FModel

                            UNION

                            SELECT DISTINCT  t3.FName AS proName, t3.Fmodel AS Fmodel, 0 AS DayInAmount, 0 AS MonthInAmount, 0 AS YearInAmount,
                            SUM(t1.FQty) AS DayOutAmount,0 AS MonthOutAmount,0 AS YearOutAmount
                            FROM
                                ICStockBill t2
                                JOIN ICStockBillEntry t1 ON t1.FInterID = t2.FInterID
                                JOIN t_icitem t3 ON t3.FItemID = t1.FItemID
                                JOIN ICTransactionType t5 ON t2.FTranType = t5.FID
                                JOIN t_StockPlace t4 ON t4.FSPID = t1.FDCSPID
                            WHERE
                                t2.FTranType = '21' AND t4.FSPID != '3'  AND t2.FStatus = '1' AND t1.FEntrySelfB0178 >= 0  AND t2.FDate = @EndTime and t3.FName IN ({proNameList}) and t3.Fmodel IN ({specList})
                            GROUP BY  t3.FName, t3.FModel

                            union

                                SELECT DISTINCT  t3.FName AS proName, t3.Fmodel AS Fmodel, 0 AS DayInAmount, 0 AS MonthInAmount, 0 AS YearInAmount,
                                0 AS DayOutAmount,SUM(t1.FQty) AS MonthOutAmount,0 AS YearOutAmount
                            FROM
                                ICStockBill t2
                                JOIN ICStockBillEntry t1 ON t1.FInterID = t2.FInterID
                                JOIN t_icitem t3 ON t3.FItemID = t1.FItemID
                                JOIN ICTransactionType t5 ON t2.FTranType = t5.FID
                                JOIN t_StockPlace t4 ON t4.FSPID = t1.FDCSPID
                            WHERE
                                t2.FTranType = '21' AND t4.FSPID != '3'  AND t2.FStatus = '1' AND t1.FEntrySelfB0178 >= 0  AND  t2.FDate BETWEEN @StartTime and  @EndTime
                                and t3.FName IN ({proNameList}) and t3.Fmodel IN ({specList})
                            GROUP BY  t3.FName, t3.FModel

                            union

                                SELECT DISTINCT  t3.FName AS proName, t3.Fmodel AS Fmodel, 0 AS DayInAmount, 0 AS MonthInAmount, 0 AS YearInAmount,
                                0 AS DayOutAmount,0 AS MonthOutAmount,SUM(t1.FQty) AS YearOutAmount
                            FROM
                                ICStockBill t2
                                JOIN ICStockBillEntry t1 ON t1.FInterID = t2.FInterID
                                JOIN t_icitem t3 ON t3.FItemID = t1.FItemID
                                JOIN ICTransactionType t5 ON t2.FTranType = t5.FID
                                JOIN t_StockPlace t4 ON t4.FSPID = t1.FDCSPID
                            WHERE
                                t2.FTranType = '21' AND t4.FSPID != '3'  AND t2.FStatus = '1' AND t1.FEntrySelfB0178 >= 0  AND  t2.FDate BETWEEN '2024-1-1' and @EndTime
                                and t3.FName IN ({proNameList}) and t3.Fmodel IN ({specList})
                            GROUP BY  t3.FName, t3.FModel

                        ) AS subquery

                        GROUP BY  proName, Fmodel";

                SqlCommand cmdK = new SqlCommand(sqlstringK, Conn2);

                cmdK.Parameters.AddWithValue("@StartTime", StartTime);
                cmdK.Parameters.AddWithValue("@EndTime", EndTime);

                SqlDataAdapter sdaK = new SqlDataAdapter(cmdK);

                DataTable dtK = new DataTable();

                sdaK.Fill(dtK);

                //DataTable Comdt = MergeTable(dtM, dtK);

                //dataGridView1.DataSource = Comdt;

                dataGridView1.DataSource = dtK;
            }
               
    }  
}

```

  • 写回答

4条回答 默认 最新

  • 浪客 2025-01-06 21:33
    关注
    
    string sqlstringK = @" SELECT 里的@换成$,$开头的字符串中才可以用{}插入变量。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 已采纳回答 1月7日
  • 修改了问题 1月6日
  • 创建了问题 1月6日