Как мне сделать SQL выбор динамического сравнения строк для работы? - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь получить правильную строку из ячейки, выбранной с помощью wpf datagrid, которую я буду использовать в операторе выбора sql для второй сетки данных wpf.При вводе значения статической строки оно будет работать, но не из динамической строки.Что не так с моим кодом?

    private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
        DataRowView row = (DataRowView)dataGrid1.SelectedItems[0];
        string barcode_string = row["BarCode"].ToString();

        //string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = '" + barcode_string + "'";
        string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = 'L002BO4'";
    }

При вводе строки в оператор sql это работает как чудо, но, конечно, я хочу, чтобы динамическая строка возвращалась из большой базы данных.

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Вы только что пропустили один " в последнем запросе.Попробуйте это

    string barcode_detail = "SELECT BarCode, PCBGUID 
       FROM TB_AOIResult WHERE
          BarCode = "+"\'" +barcode_string + "\'";
0 голосов
/ 30 декабря 2018

Пожалуйста, не объединяйте строки в операторах SQL.Используйте параметры.Проверьте в вашей базе данных правильный тип данных столбца BarCode.

    private void DataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
    {
        DataTable dt = new DataTable();
        DataRowView row = (DataRowView)dataGrid1.SelectedItems[0];
        string barcode_string = row["BarCode"].ToString();

        //string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = '" + barcode_string + "'";
        string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = @BarCode;";
        using (SqlConnection cn = new SqlConnection("Your connection string")) 
        {
            SqlCommand cmd = new SqlCommand(barcode_detail, cn);
            cmd.Parameters.Add("@BarCode", System.Data.SqlDbType.VarChar).Value = barcode_string;
            cn.Open();
            dt.Load(cmd.ExecuteReader());
            //use the data in the data table
        }
    }

EDIT Проверьте строки.Добавьте using System.Diagnostics для использования Debug.Print

        String literal = "L002BO4";
        String variable = row["BarCode"].ToString();
        if (literal.Length == variable.Length)
            Debug.Print("The length of the strings match");
        else
            Debug.Print("The lengths do not match");
        Char[] variableArray = variable.ToCharArray();
        Char[] literalArray = literal.ToCharArray();
        for (int index =0; index<literalArray.Length; index++)
        {
            if (variableArray[index] == literalArray[index])
                Debug.Print($"index {index} matches");
            else
                Debug.Print($"index {index} does not match");
        }
0 голосов
/ 30 декабря 2018

Можете ли вы попробовать, как показано ниже

 string barcode_detail = "SELECT BarCode, PCBGUID FROM TB_AOIResult WHERE BarCode = "+ barcode_string;
...