Как использовать команду параметров с оператором IN в mysql и vb.net

#mysql #sql #string #vb.net #where-clause

#mysql #sql #строка #vb.net #где-предложение

Вопрос:

Мне нужно использовать оператор IN в предложении WHERE, поэтому я попробовал следующий код с моим SQL-оператором, но он дает мне запись только для первого числа:

 MyVar_AccID= "110,112,113"

Dim MyVar_SqlStr_Main As String = "SELECT 
                                    FatoraID, 
                                    FatoraRef,
                                    FatoraCode, 
                                    FatoraDate, 
                                    (D.AccName) AS DName,
                                    FatoraQuan,
                                    CONCAT(CategoryName,' ',ProductName) AS ProdName,
                                    FatoraSalePrice, 
                                    (C.AccName) AS CusName,
                                    FatoraPurPrice,
                                    (R.AccName) AS ResoName,
                                    FatoraPalletQuan,
                                    FatoraPalletPrice,
                                    FatoraPurTotal, 
                                    FatoraCustomer, 
                                    FatoraDis,
                                    FatoraPlus,
                                    FatoraSaleTotal,
                                    FatoraDriver, 
                                    FatoraCarNo, 
                                    FatoraDriverCost, 
                                    FatoraDriverCostTotal1,
                                    FatoraDriverCostTotal2,
                                    FatoraDriverPrice,
                                    FatoraDriverPayStatus, 
                                    FatoraReso, 
                                    FatoraProduct,
                                    FatoraDetails1,
                                    FatoraDetails2,
                                    FatoraDetails3,


                                    (FatoraPalletQuan * FatoraPalletPrice) AS PalletTotalPrice 
                                    FROM tblfatora F 
                                    INNER JOIN tblproducts P ON
                                    P.ProductID = F.FatoraProduct
                                    INNER JOIN tblaccounts R ON
                                    R.AccID = F.FatoraReso
                                    INNER JOIN tblaccounts C ON
                                    C.AccID = F.FatoraCustomer
                                    LEFT JOIN tblaccounts D ON
                                    D.AccID = F.FatoraDriver
                                    INNER JOIN tblcategories CT ON
                                    CT.CategoryID = P.ProductCategory
                                    Where 
                                    (FatoraReso IN (@FatoraReso))
                                    
                                    ORDER BY FatoraDate DESC"


        xCmd = New MySqlCommand(MyVar_SqlStr_Main, Conn)

        xCmd.Parameters.Add("@FatoraReso", MySqlDbType.VarChar).Value = MyVar_AccID
 

Я тоже пытался:

 Where 
                                (FatoraReso IN ("@FatoraReso"))
 

но это не дало мне результатов, как я могу решить эту проблему, пожалуйста, обратите внимание, что я не знаю количество кодов, так что, возможно, это будет (1,2,3,4,5) или меньше, или больше.

Комментарии:

1. Проблема в том, что параметризованное предложение «IN» не может принимать более одного значения. Вот один обходной путь: параметризованный в предложениях с ADO.NET и LINQ

Ответ №1:

Похоже, вы хотите проверить, принадлежит ли значение списку, разделенному запятыми. Вы не можете сделать это с IN , который ожидает список значений, а не одну строку значений.

Общее решение использует строковые функции:

 where concat(',', @fatorareso, ',') like concat('%,', fatorareso, ',%')
 

Однако в MySQL вы можете использовать удобную строковую функцию find_in_set() :

 where find_in_set(fatorareso, @fatorareso)
 

Комментарии:

1. Обратите внимание, что из-за этого запрос не сможет использовать индекс в fatorareso